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与CSS写在同一个文件里的书写方法
Jun 02 Javascript
用js统计用户下载网页所需时间的脚本
Oct 15 Javascript
javascript 日历提醒系统( 兼容所有浏览器 )
Apr 07 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
javascript全局变量封装模块实现代码
Nov 28 Javascript
用js设置下拉框为只读的小技巧
Apr 10 Javascript
浅谈被jQuery抛弃的函数及替代函数
May 03 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
React Native自定义控件底部抽屉菜单的示例
Feb 08 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
微信小程序当前时间时段选择器插件使用方法详解
Dec 28 Javascript
vue使用websocket的方法实例分析
Jun 22 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
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python各种语言间时间的转化实现代码
2016/03/23 Python
Python常见工厂函数用法示例
2018/03/21 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
浅析python中的del用法
2020/09/02 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
出国留学自荐信
2013/10/25 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
SQL Server使用导出向导功能
2022/04/08 SQL Server