基于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 相关文章推荐
ExtJS TabPanel beforeremove beforeclose使用说明
Mar 31 Javascript
jQuery 操作option的实现代码
Mar 03 Javascript
Javascript表格翻页效果的具体实现
Oct 05 Javascript
JavaScript常用脚本汇总(一)
Mar 04 Javascript
Node.js 实现简单小说爬虫实例
Nov 18 Javascript
vue-router单页面路由
Jun 17 Javascript
jquery animate动画持续运动的实例
Nov 29 jQuery
element-ui使用导航栏跳转路由的用法详解
Aug 22 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
使用Node.js在深度学习中做图片预处理的方法
Sep 18 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
Python Django基础二之URL路由系统
2019/07/18 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
老公爱的承诺书
2014/03/31 职场文书
公司年会策划方案
2014/05/17 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
安全保证书格式
2015/02/28 职场文书
倡议书格式及范文
2015/04/29 职场文书
朋友离别感言
2015/08/04 职场文书
PHP实现两种排课方式
2021/06/26 PHP