js练手----百度知道的展示效果

昨天无意进到百度知道页面,发现左上边那块的轮换效果不错。就自己写了个,结构,图片,样式都是用它的。

function bdzhidao() {
	this.init.apply(this, arguments)
};
bdzhidao.prototype = {
	current: 0,
	prev: 0,
	interval: 0,
	timer: null,
	autoTimer: null,
	init: function(opts) {
		opts = opts || {};
		var _this = this;
		var tabs_box = this.getId(opts.tabId),
		cons_box = this.getId(opts.conId);
		this.interval = opts.interval || 3000;
		this.cons = this.getEleByClass('li', 'show', cons_box);
		this.tabs = tabs_box.getElementsByTagName('li');
		if (this.cons.length != this.tabs.length) return;
		for (var i = 0,
		len = this.tabs.length; i < len; i++) { (function(i) {
				_this.tabs[i].onclick = function() {
					clearInterval(_this.timer);
					_this.current = i - 1;
					_this.show();
				}
			})(i);
		}
		cons_box.onmouseover = tabs_box.onmouseover = function() {
			clearInterval(_this.autoTimer)
		};
		cons_box.onmouseout = tabs_box.onmouseout = function() {
			if (opts.auto) _this.auto();
		}
		if (opts.auto) this.auto();
	},
	show: function() {
		var _this = this,
		i = 0;
		var cur = ++this.current % this.cons.length;
		var curCon = this.cons[cur],
		curTab = this.tabs[cur];
		this.tabs[this.prev].className = '';
		this.cons[this.prev].style.display = 'none';
		curCon.style.display = 'block';
		curTab.className = 'current';
		this.set(curCon, 0);
		this.prev = cur;
		this.timer = setInterval(function() {
			if (i >= 1) clearInterval(_this.timer);
			i += 0.02;
			_this.set(curCon, i);
		},
		10);
	},
	auto: function() {
		var _this = this;
		this.autoTimer = setInterval(function() {
			_this.show()
		},
		this.interval)
	},
	set: function(el, val) {
		el.style.filter = "alpha(opacity=" + parseInt(val * 100) + ")";
		el.style.opacity = val;
	},
	getEleByClass: function(node, oclass, parent) {
		var oParent = parent || document;
		var eles = [];
		var nodes = oParent.getElementsByTagName(node);
		for (var i = 0,
		len = nodes.length; i < len; i++) {
			var classNames = (nodes[i].className).split(' ');
			for (var n = 0,
			m = classNames.length; n < m; n++) {
				if (classNames[n] == oclass) {
					eles.push(nodes[i]);
				}
			}
		}
		return eles;
	},
	getId: function(el) {
		return el = typeof el == 'string' ? document.getElementById(el) : el;
	}
}

用法:new bdzhidao({tabId:'slider',conId:'rc-list',auto:true,interval:3000 })
tabId,conId是必须的,auto是设置要不要自动执行效果,默认不自动循环。interval当然不是自动循环的时间间隔了,默认间隔为3秒。


结构代码我就不贴出来的,自己去扣或者写一个吧。

posted @ 2010-10-14 15:29  zjhsd2007  阅读(307)  评论(0编辑  收藏  举报