您好,欢迎来到年旅网。
搜索
您的当前位置:首页基于编写jQuery的无缝滚动插件_jquery

基于编写jQuery的无缝滚动插件_jquery

来源:年旅网
首先来看下html骨架,如下:


 
 
  • 111
  • 222
  • 333
  • 结构简单明了,没什么说的。

    讲下实现原理:
      div box是最外层盒子,给它指定的宽高,记得给box添加一个 overflow:hidden (超出的内容隐藏)样式,因为滚动肯定是会超出box的。
      我们通过js控制 ul 标签的margin 来实现滚动。横向滚动则是控制 margin-left ; 纵向滚动则是控制 margin-top;
      初始状态时,我们还要进行条件判断,判断是否进行滚动。即: 当 ul 长度小于 外层 box 长度时不进行滚动,反之则进行滚动。
      ul 的长度是通过计算得来的,即: ul 里面单个 li 的长度乘以 li 的个数。 ul_width = li_width * li_num;
      之所以能实现无缝滚动,是因为每次滚动的长度刚好大于单个 li 的长度时,我们就将ul的第一个 li 移动到ul的最后,周而复始,无限循环(关于这
      一点,你可以先不设置 overflow:hidden 来查看)。
      
    讲个原理太TM考验我的表达能力了,希望我讲清楚了。

    看插件的实现代码吧:

    
    
    

    基本的代码说明注释写的很清楚了。下面对个别知识点作下讲解:

    1.) var timer=[]; 之前timer并不是声明为数组类型的,是在我写demo的时候,由于页面同时存在两个无缝滚动的应用(为了演示横向和纵向), 出现了bug。

    因为他们两个共用了一个timer计时器,当鼠标进入其中一个时,另一个的timer也被clear了。之后修改代码将其声明为数组对象,再通过root.each()就实
    现了每个插件应用都有自己独立的timer计时器,互不干扰。也就是说此插件支持页面同时存在多个无缝滚动应用。

    2.) outerWidth() /outerHeight()函数。 这个函数比较强大,它获取的不仅仅是元素的宽度/高度,

    实际上 outerWidth()=width+borderLeft+borderRight+marginLeft+marinRight;
    当它设置为true后,即:outerWidth(true),它也会将padding计算进来:
    outerWidth()=width+borderLeft+borderRight+marginLeft+marinRight+paddingLeft+paddingRight;

    怎么样,是不是很强大啊!

    下面给出DEMO代码:

    
                
                

    Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

    违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务