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 相关文章推荐
JQuery Ajax 跨域访问的解决方案
Mar 12 Javascript
js 幻灯片的实现
Dec 06 Javascript
jQuery 全选/反选以及单击行改变背景色实例
Jul 02 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
关于session和cookie的简单理解
Jun 08 Javascript
利用D3.js实现最简单的柱状图示例代码
Dec 09 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
jQuery子选择器与可见性选择器实例分析
Jun 28 jQuery
如何在Node和浏览器控制台中打印彩色文字
Jan 09 Javascript
js实现简单的秒表
Jan 16 Javascript
element多个表单校验的实现
May 27 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
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
详解ES6中的let命令
2020/04/05 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
如何利用python制作时间戳转换工具详解
2018/09/12 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
Django单元测试工具test client使用详解
2019/08/02 Python
python生成器用法实例详解
2019/11/22 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
高中英语演讲稿范文
2014/04/24 职场文书
作风建设年活动总结
2014/08/27 职场文书
2014最新实习证明模板
2014/10/02 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书