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中打开文件,并检测iframe存在否
Dec 28 Javascript
jquery实现弹出层遮罩效果的简单实例
Mar 03 Javascript
jQuery中Ajax的load方法详解
Jan 14 Javascript
实例讲解JavaScript中的this指向错误解决方法
Jun 13 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 Javascript
vue框架制作购物车小球动画效果实例代码
Sep 26 Javascript
Vue v-bind动态绑定class实例方法
Jan 15 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
Mar 16 Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 Javascript
Vue通过provide inject实现组件通信
Sep 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
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
javascript 全角转换实现代码
2009/07/17 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
网站编辑求职信
2013/10/17 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
政工师工作总结2015
2015/05/26 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python