基于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 相关文章推荐
Prototype使用指南之range.js
Jan 10 Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
JS 去除Array中的null值示例代码
Nov 20 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
Aug 24 Javascript
Knockout自定义绑定创建方法
Dec 26 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
详解vue2路由vue-router配置(懒加载)
Apr 08 Javascript
微信小程序日历弹窗选择器代码实例
May 09 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
May 28 Javascript
JS实现简单的九宫格抽奖
Jun 28 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连接access数据库
2008/03/27 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
PyQt5实现下载进度条效果
2018/04/19 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
Python基于locals返回作用域字典
2020/10/17 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
兼职业务员岗位职责
2014/01/01 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
低碳环保演讲稿
2014/08/28 职场文书
现实表现材料范文
2014/12/23 职场文书
小学教师读书笔记
2015/07/01 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
Java界面编程实现界面跳转
2022/06/16 Java/Android