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 相关文章推荐
input+select(multiple) 实现下拉框输入值
May 21 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
Jan 17 Javascript
jquery学习笔记二 实现可编辑的表格
Apr 09 Javascript
使用angular写一个hello world
Jan 23 Javascript
Node.js中的process.nextTick使用实例
Jun 25 Javascript
javascript每日必学之运算符
Feb 16 Javascript
JS判断是否手机或pad访问实现方法
Dec 09 Javascript
Node.js查找当前目录下文件夹实例代码
Mar 07 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
JS大坑之19位数的Number型精度丢失问题详解
Apr 22 Javascript
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
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实际应用经验篇(1)
2006/10/09 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
在python中bool函数的取值方法
2018/11/01 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
给护士表扬信
2014/01/19 职场文书
股东合作协议书范本
2014/04/14 职场文书
相亲大会策划方案
2014/06/05 职场文书
安全生产标语
2014/06/06 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL
Java数据结构之堆(优先队列)
2022/05/20 Java/Android