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操作ajax返回的json的注意问题!
Feb 23 Javascript
基于node.js的快速开发透明代理
Dec 25 Javascript
Js日期选择器并自动加入到输入框中示例代码
Aug 02 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
Mar 24 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
jquery根据一个值来选中select下的option实例代码
Aug 29 Javascript
Angular的自定义指令以及实例
Dec 26 Javascript
ES6中Array.includes()函数的用法
Sep 20 Javascript
Node.js中sequelize时区的配置方法
Dec 10 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
Mar 27 Javascript
Angular性能优化之第三方组件和懒加载技术
May 10 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
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
php查询操作实现投票功能
2016/05/09 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
经验几则 推荐
2006/09/05 Javascript
实现复选框全选/全不选切换
2006/12/23 Javascript
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
jQuery选择器之子元素选择器详解
2017/09/18 jQuery
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
python映射列表实例分析
2015/01/26 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
将python图片转为二进制文本的实例
2019/01/24 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
英语专业毕业生自荐信
2013/10/28 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
校庆标语集锦
2014/06/25 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
家长会后的感想
2015/08/11 职场文书
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android