基于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 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
Javascript valueOf 使用方法
Dec 28 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
javascript使用正则表达式检测IP地址
Dec 03 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
May 13 Javascript
jquery实现模拟百分比进度条渐变效果代码
Oct 29 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
Jan 25 Javascript
JavaScript实现职责链模式概述
Jan 25 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
Aug 12 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
Nov 07 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脚本数据库功能详解(下)
2006/10/09 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
JavaScript 继承的实现
2009/07/09 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
JS随机密码生成算法
2019/09/23 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
Python常见的pandas用法demo示例
2019/03/16 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
Gap英国官网:Gap UK
2018/07/18 全球购物
explicit和implicit的含义
2012/11/15 面试题
高一政治教学反思
2014/01/28 职场文书
国企干部对照检查材料
2014/08/22 职场文书
年终工作总结范文2014
2014/11/27 职场文书
2015年教师工作总结范文
2015/03/31 职场文书