刚学习prototype.js的时候写的一个鼠标跟随提示的代码,后来在项目中发现一个很严重的问题,暂时没有修正。代码基于prototype.js v1.6。
代码打包下载
Javascript代码:
function handleTips(idElement) { this.handleBtn = (typeof idElement == 'string')? $(idElement) : idElement; this.popuptips = (typeof idElement == 'string')? $(idElement + "-tips") : idElement.id + "tips"; this.handleBtn.onmouseover = this.showTips.bind(this); this.handleBtn.onmouseout = this.hiddenTips.bind(this); this.handleBtn.onmousemove = this.cursorPosition.bind(this); } handleTips.prototype.showTips = function() { //debugger; Element.show(this.popuptips); this.cursorPosition(arguments[0]); } handleTips.prototype.hiddenTips = function() { Element.hide(this.popuptips); } handleTips.prototype.cursorPosition = function(){ var event = arguments[0] || window.event; this.arrPageSize = getPageSize(); this.pageWidth = this.arrPageSize.PageWidth; this.pageHeight = this.arrPageSize.PageHeight; this.leftSpace = Event.pointerX(event) + 20; this.topSpace = Event.pointerY(event) + 20; this.rightSpace = this.pageWidth - this.leftSpace; this.bottomSpace = this.pageHeight - this.topSpace; this.tipsWidth = this.popuptips.getWidth(); this.tipsHeight = this.popuptips.getHeight(); if (this.tipsWidth < this.rightSpace && this.tipsHeight < this.bottomSpace) { this.popuptips.setStyle({ left: Event.pointerX(event) + 20 + "px", top: Event.pointerY(event) + 20 + "px" }); } else if(this.tipsWidth > this.rightSpace && this.tipsHeight < this.bottomSpace) { this.popuptips.setStyle({ left: Event.pointerX(event) - this.tipsWidth - 20 + "px", top: Event.pointerY(event) + 20 + "px" }); } else if(this.tipsWidth < this.rightSpace && this.tipsHeight > this.bottomSpace) { this.popuptips.setStyle({ left: Event.pointerX(event) + 20 + "px", top: Event.pointerY(event) - this.tipsHeight - 20 + "px" }); } else if(this.tipsWidth > this.rightSpace && this.tipsHeight > this.bottomSpace) { this.popuptips.setStyle({ left: Event.pointerX(event) - this.tipsWidth - 20 + "px", top: Event.pointerY(event) - this.tipsHeight - 20 + "px" }); } } function getPageSize() { var scrW, scrH; if(window.innerHeight && window.scrollMaxY) { // Mozilla scrW = window.innerWidth + window.scrollMaxX; scrH = window.innerHeight + window.scrollMaxY; } else if(document.body.scrollHeight > document.body.offsetHeight){ // all but IE Mac scrW = document.body.scrollWidth; scrH = document.body.scrollHeight; } else if(document.body) { // IE Mac scrW = document.body.offsetWidth; scrH = document.body.offsetHeight; } var winW, winH; if(window.innerHeight) { // all except IE winW = window.innerWidth; winH = window.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { // IE 6 Strict Mode winW = document.documentElement.clientWidth; winH = document.documentElement.clientHeight; } else if (document.body) { // other winW = document.body.clientWidth; winH = document.body.clientHeight; } // for small pages with total size less then the viewport var pageW = (scrW < winW) ? winW : scrW; var pageH = (scrH < winH) ? winH : scrH; return {PageWidth:pageW, PageHeight:pageH, WinWidth:winW, WinHeight:winH}; } Event.observe(window, 'load', function() {new handleTips('note')});
CSS代码:
.tips { position: absolute; z-index: 9999; padding: 5px; background-color: #FFFFFF; border: 1px solid #FF6600; } #note { margin: 100px 0 0 300px; } #note-tips { width: 120px; }
No comments:
Post a Comment