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 相关文章推荐
event对象的方法 兼容多浏览器
Jun 27 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
Aug 09 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
Json解析的方法小结
Jun 22 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
Angular学习笔记之angular的$filter服务浅析
Nov 12 Javascript
微信小程序 转发功能的实现
Aug 04 Javascript
vue2.0 父组件给子组件传递数据的方法
Jan 15 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
Sep 02 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 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
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
解析php入库和出库
2013/06/25 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
javascript中Function类型详解
2015/04/28 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
基于Python的身份证号码自动生成程序
2014/08/15 Python
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Djang中静态文件配置方法
2015/07/30 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
详解Python装饰器由浅入深
2016/12/09 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
python实现ID3决策树算法
2017/12/20 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python为什么要安装到c盘
2020/07/20 Python
python实现图片转字符画
2021/02/19 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
印刷工程专业应届生求职信
2013/09/29 职场文书
自我评价怎么写正确呢?
2013/12/02 职场文书
车间工艺员岗位职责
2013/12/09 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
大学毕业感言50字
2014/02/07 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书