javascript 仿QQ滑動(dòng)菜單效果代碼
更新時(shí)間:2010年09月03日 21:21:06 作者:
javascript 仿QQ滑動(dòng)菜單效果代碼,非常漂亮的代碼,學(xué)習(xí)js的朋友可以參考下代碼風(fēng)格。
【程序源碼】
var QQ = function() {
// 公用函數(shù)
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);
}
// 緩動(dòng)類(lèi)
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;
}
}
}
}
// 主類(lèi)構(gòu)造函數(shù)
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;
};
// 默認(rèn)配置
var defaultConfig = {
trigger: 1, // 觸發(fā)方式1:click other: mouseover
auto: true, // 是否自動(dòng)切換
tween: Tween.Quart.easeOut, // 默認(rèn)緩動(dòng)類(lèi)
Time: 10, // 滑動(dòng)延時(shí)
duration: 50, // 切換時(shí)間
pause: 3000, // 停頓時(shí)間
start: function() {}, // 切換開(kāi)始執(zhí)行函數(shù)
end: function() {} // 切換結(jié)束執(zhí)行函數(shù)
};
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);
// 調(diào)用主類(lèi)
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});
【參數(shù)說(shuō)明】
var defaultConfig = {
trigger: 1, // 觸發(fā)方式 1:click 其余: mouseover
auto: true, // 是否自動(dòng)切換
tween: Tween.Quart.easeOut, // 默認(rèn)緩動(dòng)類(lèi)
Time: 10, // 滑動(dòng)延時(shí)
duration: 50, // 切換時(shí)間
pause: 3000, // 停頓時(shí)間
start: function() {}, // 切換開(kāi)始執(zhí)行函數(shù)
end: function() {} // 切換結(jié)束執(zhí)行函數(shù)
};
【使用方法】
QQ.scroll('container' /*外部容器ID*/, 'scroller'/*滑動(dòng)容器ID*/, 5/*切換圖片數(shù)目*/, {trigger: 0} /*默認(rèn)配置*/);
【源碼下載】
slider
復(fù)制代碼 代碼如下:
var QQ = function() {
// 公用函數(shù)
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);
}
// 緩動(dòng)類(lèi)
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;
}
}
}
}
// 主類(lèi)構(gòu)造函數(shù)
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;
};
// 默認(rèn)配置
var defaultConfig = {
trigger: 1, // 觸發(fā)方式1:click other: mouseover
auto: true, // 是否自動(dòng)切換
tween: Tween.Quart.easeOut, // 默認(rèn)緩動(dòng)類(lèi)
Time: 10, // 滑動(dòng)延時(shí)
duration: 50, // 切換時(shí)間
pause: 3000, // 停頓時(shí)間
start: function() {}, // 切換開(kāi)始執(zhí)行函數(shù)
end: function() {} // 切換結(jié)束執(zhí)行函數(shù)
};
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);
// 調(diào)用主類(lèi)
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});
【參數(shù)說(shuō)明】
復(fù)制代碼 代碼如下:
var defaultConfig = {
trigger: 1, // 觸發(fā)方式 1:click 其余: mouseover
auto: true, // 是否自動(dòng)切換
tween: Tween.Quart.easeOut, // 默認(rèn)緩動(dòng)類(lèi)
Time: 10, // 滑動(dòng)延時(shí)
duration: 50, // 切換時(shí)間
pause: 3000, // 停頓時(shí)間
start: function() {}, // 切換開(kāi)始執(zhí)行函數(shù)
end: function() {} // 切換結(jié)束執(zhí)行函數(shù)
};
【使用方法】
復(fù)制代碼 代碼如下:
QQ.scroll('container' /*外部容器ID*/, 'scroller'/*滑動(dòng)容器ID*/, 5/*切換圖片數(shù)目*/, {trigger: 0} /*默認(rèn)配置*/);
【源碼下載】
slider
您可能感興趣的文章:
- JS實(shí)現(xiàn)仿QQ效果的三級(jí)豎向菜單
- JS+CSS實(shí)現(xiàn)類(lèi)似QQ好友及黑名單效果的樹(shù)型菜單
- JS實(shí)現(xiàn)超簡(jiǎn)單的仿QQ折疊菜單效果
- JS實(shí)現(xiàn)仿QQ面板的手風(fēng)琴效果折疊菜單代碼
- js實(shí)現(xiàn)帶緩沖效果的仿QQ面板折疊菜單代碼
- 從QQ網(wǎng)站中提取的純JS省市區(qū)三級(jí)聯(lián)動(dòng)菜單
- javascript仿qq界面的折疊菜單實(shí)現(xiàn)代碼
- JS模擬的QQ面板上的多級(jí)可展開(kāi)的菜單
- JavaScript 下拉菜單實(shí)現(xiàn)代碼
- js自定義QQ菜單效果
相關(guān)文章
uniapp微信小程序支付前端生成簽名并調(diào)起微信支付全部代碼
想要在uniapp中實(shí)現(xiàn)支付功能,通常需要使用第三方支付服務(wù),如微信支付、支付寶支付,等這篇文章主要給大家介紹了關(guān)于uniapp微信小程序支付前端生成簽名并調(diào)起微信支付的相關(guān)資料,需要的朋友可以參考下2024-07-07
Array.prototype.slice.apply的使用方法
arguments在JavaScript語(yǔ)法中是函數(shù)特有的一個(gè)對(duì)象屬性(Arguments對(duì)象),用來(lái)引用調(diào)用該函數(shù)時(shí)傳遞的實(shí)際參數(shù)。2010-03-03
javascript 彈出的窗口返回值給父窗口具體實(shí)現(xiàn)
這篇文章主要介紹了javascript 彈出的窗口返回值給父窗口具體實(shí)現(xiàn),有需要的朋友可以參考一下2013-11-11
Javascript 鼠標(biāo)移動(dòng)上去小三角形滑塊緩慢跟隨效果
一個(gè)tab選項(xiàng)卡,當(dāng)鼠標(biāo)移動(dòng)上去時(shí)紅色滑塊跟隨,在布局過(guò)程中經(jīng)常會(huì)使用到,本文提供了詳細(xì)的實(shí)現(xiàn)代碼,感興趣的朋友可以參考下2013-04-04
原生JS使用Canvas實(shí)現(xiàn)拖拽式繪圖功能
這篇文章主要介紹了原生js實(shí)現(xiàn)Canvas實(shí)現(xiàn)拖拽式繪圖,支持畫(huà)筆、線(xiàn)條、箭頭、三角形和圓形等等圖形繪制功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-06-06
Js 隨機(jī)數(shù)產(chǎn)生6位數(shù)字
Js隨機(jī)產(chǎn)生6為數(shù)字的代碼,需要的朋友可以參考下。2010-05-05
JavaScript實(shí)現(xiàn)帶箭頭標(biāo)識(shí)的多級(jí)下拉菜單效果
這篇文章主要介紹了JavaScript實(shí)現(xiàn)帶箭頭標(biāo)識(shí)的多級(jí)下拉菜單效果,可實(shí)現(xiàn)橫向與縱向箭頭的形式標(biāo)識(shí)選中菜單項(xiàng)位置的功能,涉及javascript針對(duì)頁(yè)面元素位置的判定與樣式動(dòng)態(tài)操作技巧,需要的朋友可以參考下2015-08-08
Javascript 函數(shù)對(duì)象的多重身份
函數(shù)對(duì)象是javascript 中一個(gè)很特殊的對(duì)象,其特殊體現(xiàn)在他的多重身份上。2009-06-06

