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 相关文章推荐
一个很简单的办法实现TD的加亮效果.
Jun 29 Javascript
JS定时关闭窗口的实例
May 22 Javascript
使用POST方式弹出窗口的两种方法示例介绍
Jan 29 Javascript
PHP守护进程实例
Mar 06 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
Aug 24 Javascript
使用JavaScript实现点击循环切换图片效果
Sep 03 Javascript
vue-cli构建项目下使用微信分享功能
May 28 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 Javascript
jquery实现垂直手风琴导航栏
Feb 18 jQuery
深入理解javascript中的this
Feb 08 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中多维数组的foreach遍历示例
2014/06/13 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python中的高级函数map/reduce使用实例
2015/04/13 Python
python回调函数用法实例分析
2015/05/09 Python
python中的全局变量用法分析
2015/06/09 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
学习python可以干什么
2019/02/26 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
解决python对齐错误的方法
2020/07/16 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
专科毕业生自我鉴定
2013/12/01 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
班级课外活动总结
2014/07/09 职场文书
经营目标管理责任书
2014/07/25 职场文书
单位同意报考证明
2015/06/17 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android