基于jQuery的可以控制左右滚动及自动滚动效果的代码


Posted in Javascript onJuly 25, 2010

分享一个控制左右滚动及自动滚动的样例, 昨晚花了两个多小时, 忍受着悍蚊的叮咬, 汗水的侵袭, 一行行的敲出来的血汗代码. 哈哈.
封装了两种模式: 点击滚动版本DEMO 自动滚动版本DEMO,源码中有详细注释.
思路:
点击滚动模式下,是为点击(向前/向后/数字)添加click事件,通过控制展示区块left值实现切换.
1.向前(左):当在第一个版面时,滚动到最后一个页面,否则,累加left值,向前滚动;
2.向后(右):当在最后一个版面时,滚动到第一个页面,否则,累减left值,向后滚动;
3.数字点击:利用index(…)获取当前点击在数字列表中的索引值, 然后索引值为倍数为外围宽度负值.即可达到切换.
核心代码:

//@Mr.Think***向前滚动 
$pre.click(function(){ 
if (!$showbox.is(':animated')) { //判断展示区是否动画 
if ($cur == 1) { //在第一个版面时,再向前滚动到最后一个版面 
$showbox.animate({ 
left: '-=' + $w * ($pages - 1) 
}, 500); //改变left值,切换显示版面,500(ms)为滚动时间,下同 
$cur = $pages; //初始化版面为最后一个版面 
} 
else { 
$showbox.animate({ 
left: '+=' + $w 
}, 500); //改变left值,切换显示版面 
$cur--; //版面累减 
} 
$num.eq($cur - 1).addClass('numcur').siblings().removeClass('numcur'); //为对应的版面数字加上高亮样式,并移除同级元素的高亮样式 
} 
}); 
//@Mr.Think***向后滚动 
$next.click(function(){ 
if (!$showbox.is(':animated')) { //判断展示区是否动画 
if ($cur == $pages) { //在最后一个版面时,再向后滚动到第一个版面 
$showbox.animate({ 
left: 0 
}, 500); //改变left值,切换显示版面,500(ms)为滚动时间,下同 
$cur = 1; //初始化版面为第一个版面 
} 
else { 
$showbox.animate({ 
left: '-=' + $w 
}, 500);//改变left值,切换显示版面 
$cur++; //版面数累加 
} 
$num.eq($cur - 1).addClass('numcur').siblings().removeClass('numcur'); //为对应的版面数字加上高亮样式,并移除同级元素的高亮样式 
} 
}); 
//@Mr.Think***数字点击事件 
$num.click(function(){ 
if (!$showbox.is(':animated')) { //判断展示区是否动画 
var $index = $num.index(this); //索引出当前点击在列表中的位置值 
$showbox.animate({ 
left: '-' + ($w * $index) 
}, 500); //改变left值,切换显示版面,500(ms)为滚动时间 
$cur = $index + 1; //初始化版面值,这一句可避免当滚动到第三版时,点击向后按钮,出面空白版.index()取值是从0开始的,故加1 
$(this).addClass('numcur').siblings().removeClass('numcur'); //为当前点击加上高亮样式,并移除同级元素的高亮样式 
} 
});

自动滚动模式是基于点击滚动模式加强的,无非是添加了自动滚动事件,以及当鼠标划上时清除动画事件.
这里要说明一点.DEMO演示中,为向前/向后/数字/区域都添加了当鼠标划过时都添加了清除动画事件.但是,如果你的页面中,这几个需要添加清除动画事件的都在同一个区域内,完全可以用trigger(…)模拟实现自动滚动.
还有一点,自动滚动中是用setTimeout(“fun”,interval)实现,而不用setInterval(“fun”,interval)实现. 原因在于,setInterval是在间隔时间后重复执行传入的函数,而setTimeout只在间隔时间后执行一次函数传入函数,这样即可避免第二次鼠标划入停止动画区域时不能清除动画.
核心代码:
...... 
//@Mr.Think***调用自动滚动 
autoSlide(); 
...... 
//@Mr.Think***停止滚动 
clearFun($showbox); 
clearFun($pre); 
clearFun($next); 
clearFun($num); 
//@Mr.Think***事件划入时停止自动滚动 
function clearFun(elem){ 
elem.hover(function(){ 
clearAuto(); 
}, function(){ 
autoSlide(); 
}); 
} 
//@Mr.Think***自动滚动 
function autoSlide(){ 
$next.trigger('click'); 
$autoFun = setTimeout(autoSlide, 3000);//此处不可使用setInterval,setInterval是重复执行传入函数,这会引起第二次划入时停止失效 
} 
//@Mr.Think***清除自动滚动 
function clearAuto(){ 
clearTimeout($autoFun); 
}

更详细代码分析,请查看源码,写有详细的注释.
代码打包下载
Javascript 相关文章推荐
FCK调用方法..
Dec 21 Javascript
基于jQuery的获得各种控件Value的方法
Nov 19 Javascript
JavaScript省市联动实现代码
Feb 15 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
AngularJS基础 ng-switch 指令简单示例
Aug 03 Javascript
简单实现js倒计时功能
Feb 13 Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
Jul 11 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
微信小程序实现页面跳转传值的方法
Oct 12 Javascript
微信小程序自定义多选事件的实现代码
May 17 Javascript
用jquery实现下拉菜单效果的代码
Jul 25 #Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 #Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
Jul 24 #Javascript
来自qq的javascript面试题
Jul 24 #Javascript
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 #Javascript
js获取元素在浏览器中的绝对位置
Jul 24 #Javascript
几个有趣的Javascript Hack
Jul 24 #Javascript
You might like
php 字符串替换的方法
2012/01/10 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
php中apc缓存使用示例
2013/12/25 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
遗传算法之Python实现代码
2017/10/10 Python
Python列表元素常见操作简单示例
2019/10/25 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
模特职业生涯规划范文
2014/02/26 职场文书
党课心得体会范文
2014/09/09 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
Redis 哨兵机制及配置实现
2022/03/25 Redis
Linux磁盘管理方法介绍
2022/06/01 Servers
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python