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自动设置IFrame高度的小例子
Jun 08 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
嵌入式iframe子页面与父页面js通信的方法
Jan 20 Javascript
详解JavaScript中getFullYear()方法的使用
Jun 10 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
Aug 15 Javascript
详解node+express+ejs+bootstrap构建项目
Sep 27 Javascript
vue改变循环遍历后的数据实例
Nov 07 Javascript
js实现盒子移动动画效果
Aug 09 Javascript
vue3.0 的 Composition API 的使用示例
Oct 26 Javascript
ant-design-vue中tree增删改的操作方法
Nov 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
PHP 中的一些经验积累
2006/10/09 PHP
php实现分页工具类分享
2014/01/09 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
Python的Django框架中的数据库配置指南
2015/07/17 Python
批处理与python代码混合编程的方法
2016/05/19 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
介绍下java.util.Arrays类
2012/10/16 面试题
《走一步再走一步》教学反思
2014/02/15 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python
对Golang中的FORM相关字段理解
2021/05/02 Golang
灵能百分百第三季什么时候来?
2022/03/15 日漫
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js