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 13 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
May 23 Javascript
javascript判断非数字的简单例子
Jul 18 Javascript
javascript:void(0)的作用示例介绍
Oct 28 Javascript
现如今最流行的JavaScript代码规范
Mar 08 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
JS查找英文文章中出现频率最高的单词
Mar 20 Javascript
对于Javascript 执行上下文的全面了解
Sep 05 Javascript
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
element-ui表格数据转换的示例代码
Aug 24 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
php 前一天或后一天的日期
2008/06/28 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
在Python中执行系统命令的方法示例详解
2017/09/14 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
浅析python内置模块collections
2019/11/15 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
Why do we need Unit test
2013/01/03 面试题
大学社团活动总结
2014/04/26 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
毕业生实习证明
2014/09/19 职场文书
贫困证明书范文
2015/06/16 职场文书
采购部年度工作总结
2015/08/13 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
聊聊redis-dump工具安装问题
2022/01/18 Redis