javascript 仿QQ滑动菜单效果代码


Posted in Javascript onSeptember 03, 2010

【程序源码】

var QQ = function() { 
// 公用函数 
function T$(id) { return document.getElementById(id); } 
function T$$(root, tag) { return (root || document).getElementsByTagName(tag); } 
function $extend(des, src) { for(var p in src) { des[p] = src[p]; } return des; } 
function $each(arr, callback, thisp) { 
if (arr.forEach) {arr.forEach(callback, thisp);} 
else { for (var i = 0, len = arr.length; i < len; i++) callback.call(thisp, arr[i], i, arr);} 
} 
function currentStyle(elem, style) { 
return elem.currentStyle || document.defaultView.getComputedStyle(elem, null); 
} 
// 缓动类 
var Tween = { 
Quart: { 
easeOut: function(t,b,c,d){ 
return -c * ((t=t/d-1)*t*t*t - 1) + b; 
} 
}, 
Back: { 
easeOut: function(t,b,c,d,s){ 
if (s == undefined) s = 1.70158; 
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 
} 
}, 
Bounce: { 
easeOut: function(t,b,c,d){ 
if ((t/=d) < (1/2.75)) { 
return c*(7.5625*t*t) + b; 
} else if (t < (2/2.75)) { 
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 
} else if (t < (2.5/2.75)) { 
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 
} else { 
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 
} 
} 
} 
} // 主类构造函数 
var scrollTrans = function(cid, sid, count, config) { 
var self = this; 
if (!(self instanceof scrollTrans)) { 
return new scrollTrans(cid, sid, count, config); 
} 
self.container = T$(cid); 
self.scroller = T$(sid); 
if (!(self.container || self.scroller)) { 
return; 
} 
self.config = $extend(defaultConfig, config || {}); 
self.index = 0; 
self.timer = null; 
self.count = count; 
self.step = self.scroller.offsetWidth / count; 
}; 
// 默认配置 
var defaultConfig = { 
trigger: 1, // 触发方式1:click other: mouseover 
auto: true, // 是否自动切换 
tween: Tween.Quart.easeOut, // 默认缓动类 
Time: 10, // 滑动延时 
duration: 50, // 切换时间 
pause: 3000, // 停顿时间 
start: function() {}, // 切换开始执行函数 
end: function() {} // 切换结束执行函数 
}; 
scrollTrans.prototype = { 
constructor: scrollTrans, 
transform: function(index) { 
var self = this; 
index == undefined && (index = self.index); 
index < 0 && (index = self.count - 1) || index >= self.count && (index = 0); 
self.time = 0; 
self.target = -Math.abs(self.step) * (self.index = index); 
self.begin = parseInt(currentStyle(self.scroller)['left']); 
self.change = self.target - self.begin; 
self.duration = self.config.duration; 
self.start(); 
self.run(); 
}, 
run: function() { 
var self = this; 
clearTimeout(self.timer); 
if (self.change && self.time < self.duration) { 
self.moveTo(Math.round(self.config.tween(self.time++, self.begin, self.change, self.duration))); 
self.timer = setTimeout(function() {self.run()}, self.config.Time); 
} else { 
self.moveTo(self.target); 
self.config.auto && (self.timer = setTimeout(function() {self.next()}, self.config.pause)); 
} 
}, 
moveTo: function(i) { 
this.scroller.style.left = i + 'px'; 
}, 
next: function() { 
this.transform(++this.index); 
} 
}; 
return { 
scroll: function(cid, sid, count, config) { 
window.onload = function() { 
var frag = document.createDocumentFragment(), 
nums = []; 
for (var i = 0; i < count; i++) { 
var li = document.createElement('li'); 
(nums[i] = frag.appendChild(document.createElement('li'))).innerHTML = i + 1; 
} 
T$('page').appendChild(frag); 
// 调用主类 
var st = scrollTrans(cid, sid, count, config); 
$each(nums, function(o, i) { 
o[st.config.trigger == 1 ? 'onclick' : 'onmouseover'] = function() { o.className = 'on'; st.transform(i); } 
o.onmouseout = function() { o.className = ''; st.transform();} 
}); 
st.start = function() { 
$each(nums, function(o, i) { 
o.className = st.index == i ? 'on' : ''; 
}); 
}; 
st.transform(); 
} 
} 
} 
}(); 
QQ.scroll('container', 'scroller', 5, {trigger: 0});

【参数说明】
var defaultConfig = { 
trigger: 1, // 触发方式 1:click 其余: mouseover 
auto: true, // 是否自动切换 
tween: Tween.Quart.easeOut, // 默认缓动类 
Time: 10, // 滑动延时 
duration: 50, // 切换时间 
pause: 3000, // 停顿时间 
start: function() {}, // 切换开始执行函数 
end: function() {} // 切换结束执行函数 
};

【使用方法】
QQ.scroll('container' /*外部容器ID*/, 'scroller'/*滑动容器ID*/, 5/*切换图片数目*/, {trigger: 0} /*默认配置*/);

【源码下载】
slider
Javascript 相关文章推荐
一个加密JavaScript的开源工具PACKER2.0.2
Nov 04 Javascript
本地对象Array的原型扩展实现代码
Dec 04 Javascript
Javascript alert消息换行的方法
Aug 07 Javascript
Js base64 加密解密介绍
Oct 11 Javascript
JS批量操作CSS属性详细解析
Dec 16 Javascript
JS实现鼠标框选效果完整实例
Jun 20 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
Jun 12 Javascript
Node.js Buffer用法解读
May 18 Javascript
详解VUE项目中安装和使用vant组件
Apr 28 Javascript
详解JVM系列之内存模型
Jun 10 Javascript
原生javascript实现图片轮播效果代码
Sep 03 #Javascript
IE6不能修改NAME问题的解决方法
Sep 03 #Javascript
extjs grid设置某列背景颜色和字体颜色的方法
Sep 03 #Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 03 #Javascript
Dojo 学习要点
Sep 03 #Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 #Javascript
基于JQuery的6个Tab选项卡插件
Sep 03 #Javascript
You might like
php图片添加水印例子
2016/07/20 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
详解js的六大数据类型
2016/12/27 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
软件工程师面试题
2012/06/25 面试题
大学自主招生自荐信范文
2014/02/26 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
毕业实习证明范本
2015/06/16 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
Python常遇到的错误和异常
2021/11/02 Python