基于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 相关文章推荐
javascript中使用正则计算中文长度的例子
Apr 29 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
May 18 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
两种简单的跨域方法(jsonp、php)
Jan 02 Javascript
微信小程序图片自适应支持多图实例详解
Jun 21 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 jQuery
React BootStrap用户体验框架快速上手
Mar 06 Javascript
使用node.js实现微信小程序实时聊天功能
Aug 13 Javascript
详解vue几种主动刷新的方法总结
Feb 19 Javascript
JS数组方法reduce的用法实例分析
Mar 03 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
实用函数4
2007/11/08 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
python笔记(2)
2012/10/24 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
python友情链接检查方法
2015/07/08 Python
深入理解Python中的super()方法
2017/11/20 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
python是怎么被发明的
2020/06/15 Python
佳能法国商店:Canon法国
2019/02/14 全球购物
股份合作协议书
2014/09/10 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
授权委托书
2015/01/28 职场文书
针对吵架老公保证书
2015/05/08 职场文书
国际贸易实训总结
2015/08/03 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书