基于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 相关文章推荐
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
js修改table中Td的值(定义td的单击事件)
Jan 10 Javascript
Jquery实现页面加载时弹出对话框代码
Apr 19 Javascript
简约JS日历控件 实例代码
Jul 12 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
JS前端加密算法示例
Dec 22 Javascript
node.js学习之断言assert的使用示例
Sep 28 Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
Oct 26 Javascript
redux处理异步action解决方案
Mar 22 Javascript
JS监听组合按键思路及实现过程
Apr 17 Javascript
JS图片预加载三种实现方法解析
May 08 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实现将数组转换为XML的方法
2015/03/09 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
js 通用订单代码
2013/12/23 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
vue实现选中效果
2020/10/07 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python中的探索性数据分析(功能式)
2017/12/22 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Python单元测试简单示例
2018/07/03 Python
解决Python中回文数和质数的问题
2019/11/24 Python
django框架两个使用模板实例
2019/12/11 Python
python ubplot使用方法解析
2020/01/10 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
信用社实习人员自我鉴定
2013/09/20 职场文书
学校办公室主任职责
2013/12/27 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技