JS实现的相册图片左右滚动完整实例


Posted in Javascript onNovember 23, 2016

本文实例讲述了JS实现的相册图片左右滚动效果。分享给大家供大家参考,具体如下:

执行左移右移函数:

var $get = function(id) {
  return "string" == typeof id ? document.getElementById(id) : id;
};
var Extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}
var CurrentStyle = function(element) {
  return element.currentStyle || document.defaultView.getComputedStyle(element, null);
}
var Bind = function(object, fun) {
  var args = Array.prototype.slice.call(arguments).slice(2);
  return function() {
    return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));
  }
}
var Tween = {
  Quart: {
    easeOut: function(t, b, c, d) {
      return -c * ((t = t / d - 1) * t * t * t - 1) + b;
    }
  },
  Back: {
    easeOut: function(t, b, c, d, s) {
      if (s == undefined) s = 1.70158;
      return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
    }
  },
  Bounce: {
    easeOut: function(t, b, c, d) {
      if ((t /= d) < (1 / 2.75)) {
        return c * (7.5625 * t * t) + b;
      } else if (t < (2 / 2.75)) {
        return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
      } else if (t < (2.5 / 2.75)) {
        return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
      } else {
        return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
      }
    }
  }
}
//容器对象,滑动对象,切换数量
var SlideTrans = function(container, slider, count, options) {
  this._slider = $get(slider);
  this._container = $get(container); //容器对象
  this._timer = null; //定时器
  this._count = Math.abs(count); //切换数量
  this._target = 0; //目标值
  this._t = this._b = this._c = 0; //tween参数
  this.Index = 0; //当前索引
  this.SetOptions(options);
  this.Auto = !!this.options.Auto;
  this.Duration = Math.abs(this.options.Duration);
  this.Time = Math.abs(this.options.Time);
  this.Pause = Math.abs(this.options.Pause);
  this.Tween = this.options.Tween;
  this.onStart = this.options.onStart;
  this.onFinish = this.options.onFinish;
  var bVertical = !!this.options.Vertical;
  this._css = bVertical ? "top" : "left"; //方向
  //样式设置
  var p = CurrentStyle(this._container).position;
  p == "relative" || p == "absolute" || (this._container.style.position = "relative");
  this._container.style.overflow = "hidden";
  this._slider.style.position = "absolute";
  this.Change = this.options.Change ? this.options.Change :
    this._slider[bVertical ? "offsetHeight" : "offsetWidth"] / this._count;
};
SlideTrans.prototype = {
  //设置默认属性
  SetOptions: function(options) {
    this.options = {//默认值
    Vertical: true, //是否垂直方向(方向不能改)
      Auto: false, //是否自动
      Change: 0, //改变量
      Duration: 50, //滑动持续时间
      Time: 10, //滑动延时
      Pause: 2000, //停顿时间(Auto为true时有效)
      onStart: function() { }, //开始转换时执行
      onFinish: function() { }, //完成转换时执行
      Tween: Tween.Quart.easeOut//tween算子
    };
    Extend(this.options, options || {});
  },
  //开始切换
  Run: function(index) {
    //修正index
    index == undefined && (index = this.Index);
    index < 0 && (index = this._count - 1) || index >= this._count && (index = 0);
    //设置参数
    this._target = -Math.abs(this.Change) * (this.Index = index);
    this._t = 0;
    this._b = parseInt(CurrentStyle(this._slider)[this.options.Vertical ? "top" : "left"]);
    this._c = this._target - this._b;
    this.onStart();
    this.Move();
  },
  //移动
  Move: function() {
    clearTimeout(this._timer);
    //未到达目标继续移动否则进行下一次滑动
    if (this._c && this._t < this.Duration) {
      this.MoveTo(Math.round(this.Tween(this._t++, this._b, this._c, this.Duration)));
      this._timer = setTimeout(Bind(this, this.Move), this.Time);
    } else {
      this.MoveTo(this._target);
      this.Auto && (this._timer = setTimeout(Bind(this, this.Next), this.Pause));
    }
  },
  //移动到
  MoveTo: function(i) {
    this._slider.style[this._css] = i + "px";
  },
  //下一个
  Next: function() {
    this.Run(++this.Index);
  },
  //上一个
  Previous: function() {
    this.Run(--this.Index);
  },
  //停止
  Stop: function() {
    clearTimeout(this._timer); this.MoveTo(this._target);
  }
};

在前天html加入div容器:

<!-- Icon scroll begin -->
<div style="text-align:center; width:100%; margin:auto auto">
  <div class="container" id="idContainer" runat="server" >
  </div>
</div>
<!--end-->
<!--左右滚动按钮-->
<div class="defaultprenext">
<table cellpadding=0 cellspacing=0 style="width:100%">
 <tr>
   <td style="width:40%; text-align:left; padding-left:6px">
   <img id="ImgPre" alt="" src="ImageV3/Default/pre-gray.png" />
   <span class="pager" id="Pre" style="color:Gray">Pre</span></td>
   <td style="width:20%; text-align:center">
     <div class="defaultprenextmid">
      <div style="height:10px; vertical-align:middle; line-height:10px">
       <img src="ImageV3/Default/greendot.png" id="Img1" /> 
        <img src="ImageV3/Default/graydot.png" id="Img2" /> 
        <img src="ImageV3/Default/graydot.png" id="Img3" />
      </div>
    </div>
   </td>
   <td style="width:40%; text-align:right; padding-right:6px">
    <span class="pager" id="Next" style="color:#2f6417">Next</span>
    <img id="ImgNext" alt="" src="ImageV3/Default/next-green.png" />
   </td>
 </tr>
</table>
</div>

下面是改变左右按钮可用状态

var imgNum = $get("idContainer").getElementsByTagName("img").length;
var pre = $get("Pre");
var next = $get("Next");
var i = 0;
if (imgNum > 0) {
  var st = new SlideTrans("idContainer", "idSlider", 3, { Vertical: false });
  if (i < 2) {
    $get("Next").onclick = function() {
      if (i < 2) {
        st.Next();
        i++;
        if (i == 1) {
          $get("ImgPre").src = "ImageV3/Default/pre-green.png";
          pre.style.color = "#2f6417";
        }
        if (i == 2) {
          $get("ImgNext").src = "ImageV3/Default/next-gray.png";
          next.style.color = "Gray";
        }
        ChangePicIndex(i);
      }
    }
  }
  $get("Pre").onclick = function() {
    if (i > 0) {
      st.Previous();
      $get("ImgNext").src = "ImageV3/Default/next-green.png";
      next.style.color = "#2f6417";
      i--;
      if (i == 0) {
        $get("ImgPre").src = "ImageV3/Default/pre-gray.png";
        pre.style.color = "Gray";
      }
      ChangePicIndex(i);
    }
  }
  st.Run();
}
function ChangePicIndex(index) {
  switch (index) {
    case 1:
      $get("Img1").src = "ImageV3/Default/graydot.png";
      $get("Img2").src = "ImageV3/Default/greendot.png";
      $get("Img3").src = "ImageV3/Default/graydot.png";
      break
    case 2:
      $get("Img1").src = "ImageV3/Default/graydot.png";
      $get("Img2").src = "ImageV3/Default/graydot.png";
      $get("Img3").src = "ImageV3/Default/greendot.png";
      break
    default:
      $get("Img1").src = "ImageV3/Default/greendot.png";
      $get("Img2").src = "ImageV3/Default/graydot.png";
      $get("Img3").src = "ImageV3/Default/graydot.png";
  }
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScipt基本教程之JavaScript语言的基础
Jan 16 Javascript
jquery select选中的一个小问题
Oct 11 Javascript
js 获取子节点函数 (兼容FF与IE)
Apr 18 Javascript
使用jQuery.fn自定义jQuery翻页插件
Jan 20 Javascript
js实现图片轮换效果代码
Apr 16 Javascript
详解jQuery中的empty、remove和detach
Apr 11 Javascript
JavaScript中return用法示例
Nov 29 Javascript
javascript实现一个网页加载进度loading
Jan 04 Javascript
正则 js分转元带千分符号详解
Mar 08 Javascript
vue filters的使用详解
Jun 11 Javascript
ES6实现图片切换特效代码
Jan 14 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 Javascript
jQuery-mobile事件监听与用法详解
Nov 23 #Javascript
jquery-mobile表单的创建方法详解
Nov 23 #Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 #Javascript
浅析Node.js:DNS模块的使用
Nov 23 #Javascript
jquery-mobile基础属性与用法详解
Nov 23 #Javascript
微信小程序 wx.request(接口调用方式)详解及实例
Nov 23 #Javascript
利用jquery获取select下拉框的值
Nov 23 #Javascript
You might like
多重?l件?合查?(二)
2006/10/09 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
js实现无缝轮播图
2020/03/09 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
庆中秋节主题活动方案
2014/02/03 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
求职面试个人自我评价
2014/02/28 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
护士医德医风自我评价
2014/09/15 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
《比尾巴》教学反思
2016/02/24 职场文书