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 相关文章推荐
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
jquery表单对象属性过滤选择器实例分析
May 18 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
Dec 09 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 Javascript
JavaScript使用类似break机制中断forEach循环的方法
Nov 13 Javascript
js html实现计算器功能
Nov 13 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 Javascript
vscode中Vue别名路径提示的实现
Jul 31 Javascript
js实现贪吃蛇小游戏(加墙)
Jul 31 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+mysql写的留言本
2006/10/09 PHP
php实现微信发红包
2015/12/05 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
Python 文件和输入输出小结
2013/10/09 Python
寻找网站后台地址的python脚本
2014/09/01 Python
初步理解Python进程的信号通讯
2015/04/09 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
零基础学python应该从哪里入手
2020/08/11 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
团委书记的竞聘演讲稿
2014/04/24 职场文书
学校志愿者活动总结
2014/06/27 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏