jQuery图片滚动图片的效果(另类实现)


Posted in Javascript onJune 02, 2013

需求 : 图片切换的时候下一屏不允许出现空白的项,换句话说就是 :

1、当移动的最后一屏移动的个数小于要展示的个数的时候 ,只移动(展示个数-最后一屏的个数的)差值。 举个例子: 每一屏都要展示7个,但总个数才10个,滚动到下一屏时候用户看到的还是7个,这个时候需要移动的是三个

这个效果是基于jQuery写的,只是想纪念下自己的学习 话不多说了,贴代码

(function( $ ){
     var slider = function( elem , args ){
         this.config = $.extend({
             effect   : 'x', //效果  水平 - x
             speed    : 600 , //动画速度
             trigger  : 'mouseenter', //触发事件
             callback : null , // 回调函数
             view     : 7 
         }, args || {}  );         this.history = [];//记录移动的历史记录
         this.index = 0;
         this.el = elem;
         this.length = this.el.find('li').length;//记录总长度
         this.width = this.el.find('li').eq(0).outerWidth();//记录每一个单项的宽度
         this.init();
     }
     slider.prototype = {
         constructor : slider,
         init : function(){
             this.bindEvents();
         },
         bindEvents : function(){
             this.prev();
             this.next();
         },
         prev :  function(){
             this.el.find('[data-type="left"]').click( $.proxy(function(){
                 if( !this.history.length ) return;//如果记录为空,证明没有进行移动过,所以直接return
                 this.index--;
                 var step = this.history.pop();//取最后的移动步骤
                 var move =  step * this.width;//算出移动宽度
                 this.el.find("ul").animate( { "left" : "+="+move+"px" } , this.config.speed )
             } , this));
         },
         next : function(){
             this.el.find('[data-type="right"]').click( $.proxy(function(){
                 //如果是当前的最后一页,直接return
                 if(this.index == parseInt( this.length / this.config.view , 10 ) ){
                     return;
                 }
                 this.index++;
                 //这个计算很重要
                 //计算 ( 下一页 * view ) 展示个数是否大于总长度 : 好比当前在第一页 (1+1) *7 > 12(总长度)
                 //则this.step 赋值为取余 ,也就是剩下要移动的个数
                 if( this.config.view * (this.index+1) > this.length ){
                     this.step =  this.length%this.config.view;
                 }else{
                     //否则移动展示的个数
                     this.step = this.config.view;
                 }
                 //记录移动的历史记录
                 this.history.push(this.step);
                 var move = -1 * this.step * this.width; 
                 this.el.find("ul").animate( { "left" : "+="+move+"px" } , this.config.speed )
             } , this)); 
         }
     }
     $.fn.slider = function( args ){
         return this.each(function(){
             var el = this;
             var plugins = new slider( $( el ) , args );
             $(el).data("slider" , plugins );
         });
     }
 })(jQuery)

开始对这个实现没有好的想法,本来想利用一个变量记录当前的移动个数的,但是后面突然想到用数组来做这样子的处理,顿时感觉清晰了。

这个的实现重点是一个记录移动步骤的数组。向左移动的时候往数组里面push移动的步骤,向右移动的时候,从数组里面取最后一项 [].pop()。

这样子很好的实现了需求,做的比较粗糙,麻烦各位大神提点意见

Javascript 相关文章推荐
javascript脚本调试方法小结
Nov 24 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
JS实现超精简响应鼠标显示二级菜单代码
Sep 12 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 Javascript
Node.js API详解之 net模块实例分析
May 18 Javascript
详解如何修改 node_modules 里的文件
May 22 Javascript
JavaScript实现简易计算器小功能
Oct 22 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
Jun 02 #Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 #Javascript
js内存泄露的几种情况详细探讨
May 31 #Javascript
js判断鼠标同时离开两个div的思路及代码
May 31 #Javascript
Javacript实现颜色梯度变化和渐变的效果代码
May 31 #Javascript
js 输出内容到新窗口具体实现代码
May 31 #Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
May 31 #Javascript
You might like
php4的session功能评述(二)
2006/10/09 PHP
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
js数组常用最重要的方法
2018/02/04 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
Python命名空间详解
2014/08/18 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
python机器学习之决策树分类详解
2017/12/20 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
手写一个python迭代器过程详解
2019/08/27 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
策划主管的工作职责
2013/11/24 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书