jQuery实现滚动效果详解1

声明:第一次写原创,本人初学,很多地方一知半解,本篇算是一个学习的笔记,欢迎批评指正,转载请注明。

今天要做的效果是在网上经常能看到多幅图片向左无缝滚动,鼠标滑过动画暂停,鼠标滑出动画继续的效果。网上现成的代码和插件很多,拿来用有时候不大顺手,今天我就来学习一下它的原理。

要实现这个效果:
1、需要一个展示区,滚动的内容只有通过展示区才能被看到id=visual_area
2、把滚动的内容横向排列的载体,我们姑且叫它画布,注意不能理解PS中的画布class=scroll_area
3、看起来要滚动的内容id=scroll_content

见上图,可以想象#scroll_content,共有4块要滚动的内容,就好像内容1,2,3,4手拉手通过可视区,如果让内容4滚动出可视区,再重新滚动,则会出现一段时间的空白,怎么处理呢,今天的例子中采取用复制滚动内容补位的方法,由于补位的内容同#scroll_content一模一样,肉眼看起来好像连续不断的滚动一样,为什么好多js滚动效果我们拿过来改成自己的css样式,出现跳动,就是这个原因。

上面我提到了,“看起来要滚动的内容”,其实在本例中并不是#scroll_content在滚动,而是可视区滚动条的水平位置每隔一段时间设置加大一些,如每隔1000毫秒加大200像素,水平滚动条的位置最左是0,向右不断增加。

下面看一个例子,例子中我用橙色区做可视区,css设置显示滚动条overflow:scroll而不是 hidden,彩虹色部分做画布,在我们向右不断拖动滚动条时,画布看起来就向左滚动起来了。

本例中为了便于观察,我把补位的内容标注了一下。
HTML结构:

<div id="visual_area">
  <div class="scroll_area">
    <ul id="scroll_content">
      <li><p>内容1</p></li>
      <li><p>内容2</p></li>
      <li><p>内容3</p></li>
    </ul>
    <ul>
      <li><p>补位1</p></li>
      <li><p>补位2</p></li>
      <li><p>补位3</p></li>
    </ul>
  </div>
</div>

见下图:#visual_area滚动条的值超过#scroll_content宽度时候,滚动条的值设置为0,然后继续增加,如此循环往复,看起来就是一个连续的滚动,如果补位1的内容和内容1一样样的,对我们来说就没有跳动。

CSS写法:

* { padding: 0; margin: 0 }
#visual_area { width: 600px; height: 150px; background: #333; margin: 100px auto; overflow: hidden; }
#visual_area ul { background: #fff; float: left }
#visual_area li { list-style: none; float: left; width: 200px; height: 150px; line-height: 150px; text-align: center; }
#visual_area li p { background: #ccc; width: 198px; height: 148px; border: 1px solid #000 }
.scroll_area { width: 4000px; height: 150px }

.scroll_area的宽度只要大一些,一定要超过#scroll_content和补位内容的宽度。

Javascript写法:

$(function(){
    var roll=function(){
        var o_place=$(‘#visual_area‘).scrollLeft();
        var n_place=o_place+200;
        if(n_place<$(‘#scroll_content‘).width()){
            $(‘#visual_area‘).scrollLeft(n_place);
        }
        else{
            $(‘#visual_area‘).scrollLeft(0);
        }
    }
    setInterval(roll,1000) ;
    })

在详解1中,我制作一个最简单的无缝滚动效果,鼠标滑入滑出的处理在详解2中继续说明,因为我自己是个初学者,很多时候都是边学习边记录的。
setInterval函数说明,本例中经过1000毫秒(时间间隔)向左滚动200像素(步长),是一个很慢速并且感觉有些跳的滚动,要实现比较细腻平滑的效果,时间间隔和步长尽量小一些,调整这两个数值会出现很多有趣的效果,有兴趣的可以试一试。
需要说明的是:
 var o_place=$(‘#visual_area‘).scrollLeft();
 var n_place=o_place+200;

为什么要这样做呢?
setInterval函数在页面加载后的1秒后,获取可视区滚动条位置,滚动条位置设置为+200,所以执行一次roll函数滚动条位置加200,加了200之后的滚动条位置大于等于滚动内容的宽度就把滚动条位置归0.

作者: 刘牧云

日期: 2015年12月 11日

时间: 2024-10-11 11:41:24

jQuery实现滚动效果详解1的相关文章

html学习 - jquery事件监听详解

html学习 - jquery事件监听详解 html学习 - jquery事件监听详解 监听方法 监听方法参数解释 click参数 事件自动执行问题解决 bind方法 live方法 监听方法 在jquery里,监听的方法比较多,用的最多的就是简单的.click() .onchange() .pressdown() 所以这样很简单啊,直接使用就好了,只要符合参数规范就可以了.除了这个还有bind() live() 方法. 而addEventListener()同bind()方法是没有很大功能上的区

jQuery Event.which 属性详解

jQuery Event.which 属性详解 which属性用于返回触发当前事件时按下的键盘按键或鼠标按钮. 对于键盘和鼠标事件,该属性用于确定你按下的是哪一个键盘按键或鼠标按钮. which属性对DOM原生的event.keyCode和event.charCode进行了标准化. 适用的事件类型主要有键盘事件:keypress.keydown.keyup,以及鼠标事件:mouseup.mousedown. 该属性属于jQuery的Event对象(实例). 语法 jQuery 1.1.3 新增该

触碰jQuery:AJAX异步详解

触碰jQuery:AJAX异步详解 传送门:异步编程系列目录…… 示例源码:触碰jQuery:AJAX异步详解.rar AJAX 全称 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).它并非一种新的技术,而是以下几种原有技术的结合体. 1)   使用CSS和XHTML来表示. 2)   使用DOM模型来交互和动态显示. 3)   使用XMLHttpRequest来和服务器进行异步通信. 4)   使用javascript来绑定和调用.

jQuery Validate验证框架详解

jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一.导入js库 <script type="text/javascript" src="<%=path %>/validate/jquery-1.6.2.min.js"></script> <script type="text/javascript" src

基于jQuery的TreeGrid组件详解

一.TreeGrid组件相关的类 1.TreeGrid(_config) _config:json格式的数据,组件所需要的数据都通过该参数提供. 2.TreeGridItem(_root, _rowId, _rowIndex, _rowData) _root:显示组件实例的目标容器对象. _rowId:选中行的id. _rowIndex:选中行的索引. _rowData:json格式的行数据. 二._config参数详解 id:组件实例的id. width:组件实例的宽度. renderTo:用

Cocos2d-x滚动列表详解(CCScrollView的使用)

今天要写一个滚动列表功能,类似下面这样.(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便) 首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似的控件. 在cocos2d-x引擎中参照ios中的UITableView实现了一个叫做CCTableView的类,用于创建列表,对于熟悉ios程序设计的人来说,这个内容应该是很好理解的. 下面就介绍下CCTableView. 首先,mark几个比较好的博文. Cocos2d-x CCTableVie

【转】jQuery Validate验证框架详解

jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一.导入js库 <script type="text/javascript" src="<%=path %>/validate/jquery-1.6.2.min.js"></script> <script type="text/javascript" src

CSS3的3D转换效果详解介绍

CSS3的3D转换效果详解介绍:本章介绍一下CSS3的3D转换效果,此效果的实现依靠的是transform属性,3D转换只是此属性的部分应用,更多相关内容可以参阅CSS3的transform属性总略介绍一章节.掌握3D转换效果,可以从三个方法作为突破口,分别是rotateX, rotateY, rotateZ,在2D变换过程中rotate()函数的应用,它表示旋转的意思,由于是2D变换,所以它只是在一个平面进行旋转,所以无需细分,具体可以参阅CSS3的2D转换效果详细介绍一章节. 下面分别介绍一

jQuery的deferred对象详解(转)

jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本. 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. 这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax.为了实现它,jQuery的全部ajax代码都被改写了.但是,它比较抽象,初学者很难掌握,网上的教程也不多.所以,我把自己的学习笔记整理出来了,希望对大家有用. 本文不是初级教程,针对的读者是那些已经具备