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 相关文章推荐
jQuery中的编程范式详解
Dec 15 Javascript
JQuery鼠标移到小图显示大图效果的方法
Jun 10 Javascript
JS实现仿新浪黄色经典滑动门效果代码
Sep 27 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
Nov 22 Javascript
jquery对所有input type=text的控件赋值实现方法
Dec 02 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
Zepto实现密码的隐藏/显示
Apr 07 Javascript
React优化子组件render的使用
May 12 Javascript
js数据类型转换与流程控制操作实例分析
Dec 18 Javascript
详解JavaScript中精度失准问题及解决方法
Feb 04 Javascript
jquery插件实现悬浮的菜单
Apr 24 jQuery
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
原生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/10/15 PHP
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
Python实现八皇后问题示例代码
2018/12/09 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
涉外文秘个人求职的自我评价
2013/10/07 职场文书
代理人委托书
2014/08/01 职场文书
平安家庭事迹材料
2014/12/20 职场文书
2015年司法局工作总结
2015/05/22 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
感恩父母主题班会
2015/08/12 职场文书
军训决心书范文
2015/09/22 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery