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动态加载以及确定加载完成的代码
Jul 31 Javascript
JavaScript使用concat连接数组的方法
Apr 06 Javascript
jQuery+Ajax实现无刷新操作
Jan 04 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
jQuery EasyUI Tab 选项卡问题小结
Aug 16 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 Javascript
bootstrap laydate日期组件使用详解
Jan 04 Javascript
canvas绘图不清晰的解决方案
Feb 28 Javascript
Angular中$broadcast和$emit的使用方法详解
May 22 Javascript
使用async-validator编写Form组件的方法
Jan 10 Javascript
详解vue axios用post提交的数据格式
Aug 07 Javascript
JavaScript如何判断对象有某属性
Jul 03 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
图书管理程序(二)
2006/10/09 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
深入php内核之php in array
2015/11/10 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
JS实现点星星消除小游戏
2020/03/24 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
python通过索引遍历列表的方法
2015/05/04 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python正则表达式和元字符详解
2018/11/29 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
JPA面试常见问题
2016/11/14 面试题
一套软件测试笔试题
2014/07/25 面试题
七年级历史教学反思
2014/02/05 职场文书
第二课堂活动总结
2014/05/07 职场文书
学习保证书100字
2015/02/26 职场文书
门店店长岗位职责
2015/04/14 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
六年级作文之预言作文
2019/10/25 职场文书