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 相关文章推荐
js面向对象 多种创建对象方法小结
May 21 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
js动态改变select选择变更option的index值示例
Jul 10 Javascript
文字垂直滚动之javascript代码
Jul 29 Javascript
总结javascript中的六种迭代器
Aug 16 Javascript
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
vue router 跳转后回到顶部的实例
Aug 31 Javascript
JavaScript中callee和caller的区别与用法实例分析
Jun 28 Javascript
jQuery/JS监听input输入框值变化实例
Oct 17 jQuery
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
vue实现图片懒加载的方法分析
Feb 05 Javascript
js+canvas实现画板功能
Sep 13 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
在PHP中使用灵巧的体系结构
2006/10/09 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
jQuery 无刷新分页实例代码
2013/11/12 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
Python获取央视节目单的实现代码
2015/07/25 Python
Python批量更改文件名的实现方法
2017/10/29 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
pytorch梯度剪裁方式
2020/02/04 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
联谊会主持词
2014/03/26 职场文书
寄语学生的话
2014/04/10 职场文书
出国英文推荐信
2014/05/10 职场文书
机电系毕业生求职信
2014/07/11 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
婚礼答谢词
2015/01/04 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
python如何进行基准测试
2021/04/26 Python
Python可视化学习之seaborn调色盘
2022/02/24 Python
bose降噪耳机音能消除人声吗
2022/04/19 数码科技