/* author: -------*netsnower(设计) -------*jin.dh(前端) date: -------*2012/4 */ //tool //获取窗口 function getw() { var client_h, client_w, scrolltop; client_h = document.documentelement.clientheight || document.body.clientheight; client_w = document.documentelement.clientwidth || document.body.clientwidth; scrolltop = document.documentelement.scrolltop || document.body.scrolltop; return o = { w: client_w, h: client_h, s: scrolltop }; } //创建标签 function $c(tag){ return document.createelement(tag||"div"); }; //添加dom function $d(tag,css,father){ if(!tag || !css)return; var tag = $c(tag); if(css){ setstyle(tag,css); }; father = father || document.body; father.appendchild(tag); return tag; } //获取css function getstyles(ele) { var style; if (document.defaultview && document.defaultview.getcomputedstyle) style = document.defaultview.getcomputedstyle(ele, null); else style = ele.currentstyle; return style; }; //获取对象 function g(id) { if (!id) return; return (typeof id == "string" ? document.getelementbyid(id) : id); } //设置样式 function setstyle(ele, css) { if (!ele) return; var x, y, z, m; z = ele; x = z.style; for (var s in css) { m = css[s]; y = m + "px"; switch (s) { case "w":x.width = y; break; case "h":x.height = y; break; case "l":x.left = y; break; case "t":x.top = y; break; case "z":x.zindex = m; break; case "a":x.position = m; break; case "d":x.display = m; break; case "i":z.innerhtml = m; break; case "bg":x.background = m; break; case "b":x.border = m; break; case "d":x.display = m; break; case "m":x.margin = m; break; case "p":x.padding = m; break; case "rotate" : x["moztransform"] = "rotate("+m+"deg)"; x["otransform"] = "rotate("+m+"deg)"; x["webkittransform"] = "rotate("+m+"deg)"; break; default: x[s] = m; break; }; }; }; //事件处理 var eventutil = { addhandler: function(ele, type, handler) { //绑定事件 var list = { a: ["addeventlistener", "attachevent"], r: ["removeeventlistener", "datachevent"] }; var name = arguments[3] === true ? list["r"] : list["a"]; if (ele[name[0]]) { ele[name[0]](type, handler, false) } else if (ele.attachevent) { ele[name[1]]("on" + type, handler); } else { var handler = arguments[3] === true ? handler: null; ele["on" + type] = handler; } }, removehandler: function(ele, type, handler) { //删除绑定 this.addhandler(ele, type, handler, true); }, getevent: function(event) { //获取事件对象 return event ? event: window.event; }, gettarget: function(event) { //获取正在处理发生事件的对象 return event.target || event.srcelement; }, stoppropagation: function(event) { //阻止冒泡 if (event.stoppropagation) { event.stoppropagation(); } else { event.cancelbubble = true; } }, preventdefalut: function(event) { //阻止默认行为 if (event.preventdefalut) { event.preventdefault(); } else { event.returnvalue = false; } }, getrelatedtarget: function(event) { //获取当前目标(mouseover or mouseout)的时候有效 if (event.getrelatedtarget) { return event.getrelatedtarget; } else if (event.toelement) { return event.toelement; } else if (event.fromelement) { return event.fromelement; } else { return null; } }, addload: function(fun) { //window.onload处理 var nowload = window.onload; if (typeof nowload != "function") { window.onload = fun; } else { window.onload = function() { nowload(); fun(); }; }; }, getwheeldelta:function(event){ //获取滑轮方向 if(event.wheeldelta){ return event.wheeldelta; }else{ return -event.detail * 40; } } }; //dom //滚动类 var bodyscroll = { init: function() { var that = this; this.wrapbox = g("wrapbox"); this.wrap = g("wrap"); this.scrolltool = g("scrolltool"); if(this.wrapbox.offsetheight>=this.wrap.offsetheight){ this.scrolltool.style.display = "none"; return false; }; eventutil.addhandler(that.scrolltool,"mousedown",function(e){ var e = eventutil.getevent(e); that.scrolltool.lasty = e.clienty - that.scrolltool.offsettop; that.scrolltool.down = true; //设置拖动必备条件 setmove(that.scrolltool,e); document.onmousemove = function(e){ var e = eventutil.getevent(e); var post = e.clienty -that.scrolltool.lasty; if(post<=0){ post = 0; }else if(post>=that.maxscrollt){ post = that.maxscrollt; }; setstyle(that.scrolltool, {t:post}); that.scrollmove(); }; document.onmouseup = function(){ that.scrolltool.stop(); } }); eventutil.addhandler(this.wrapbox, "mousewheel", function (e) { var e = eventutil.getevent(e); that.wheelscroll(e); if (e && e.preventdefault) { e.preventdefault(); e.stoppropagation(); } else { e.returnvalue = false; return false; } }); //ff兼容 eventutil.addhandler(this.wrapbox, "dommousescroll", function (e) { var e = eventutil.getevent(e); that.wheelscroll(e); if (e && e.preventdefault) { e.preventdefault(); e.stoppropagation(); } else { e.returnvalue = false; return false; } }); that.resizetimer = 0; that.wrapttimer = null; that.getdata(); }, getdata:function(){ var that = this; var client = getw(); this.wraph = this.wrap.offsetheight; this.scrolltoolh =this.scrolltool.offsetheight; that.maxscrollt = this.wrapbox.offsetheight - that.scrolltoolh; //滚动比例 this.scrollscale = (this.wraph - this.wrapbox.offsetheight)/that.maxscrollt; this.toolt = that.scrolltool.offsettop; }, wheelscroll:function(e){ var that = this; var e = eventutil.getevent(e); var wheeldelta = eventutil.getwheeldelta(e); var nowtoolt = that.scrolltool.offsettop; if(wheeldelta>0){ nowtoolt-=15; }else if(wheeldelta<0){ nowtoolt+=15; }; if(nowtoolt<=0){ nowtoolt = 0; }; if(nowtoolt >= that.maxscrollt){ nowtoolt = that.maxscrollt; }; setstyle(that.scrolltool, { t: nowtoolt }); that.scrollmove(); }, move: function(num){ var that = this; var tnum = num; var b,t_b; clearinterval(that.movetimer); if(arguments.length===2){ var post = tnum/that.scrollscale; clearinterval(that.movescrolltimer); that.movescrolltimer = setinterval(function() { //滚动条 t_b = math.floor(math.abs(parseint(getstyles(that.scrolltool).top))); t_b += (post - t_b) / 5; if (math.abs((math.abs(t_b)-math.abs(post)))<4) { t_b = post; clearinterval(that.movescrolltimer); }; setstyle(that.scrolltool, { t: t_b }); //内容 b = math.floor(math.abs(parseint(getstyles(that.wrap).top))); b += math.floor((tnum - b) /5); if (math.abs((math.abs(b)-math.abs(tnum)))<5) { b = tnum; clearinterval(that.movetimer); }; //showmsg(b); setstyle(that.wrap, { t: -b }); }, 30); }else{ setstyle(that.wrap, { t: -tnum }); }; }, scrollmove:function(){ var that = this; that.toolt = that.scrolltool.offsettop; var post = math.floor(that.toolt*that.scrollscale); that.move(post); } }; //拖拽必备条件(清除焦点,设置鼠标范围,obj为拖动对象,event为事件对象)。 function setmove(obj,event){ //清除选择 window.getselection ? window.getselection().removeallranges() : document.selection.empty(); if(document.all){ //is ie //焦点丢失 obj.onlosecapture = function(){obj.stop();} //设置鼠标捕获 obj.setcapture(); }else{ //焦点丢失 window.onblur =function(){obj.stop();} //阻止默认动作 event.preventdefault(); }; obj.stop = function(){ if(obj.releasecapture){ obj.releasecapture(); }; document.onmousemove = null; document.onmouseup = null; window.onblur = null; } }