奇怪的菜单问题

gutty 2006-02-23 08:40:40
如下图所示:
http://blog.sina.com.cn/pic/3ef43fba0200017i


在大多数人的电脑上菜单显示正确,但有一台机器就是这个情况。
菜单是用javascrpt写的,菜单数据动态地从SQL server数据库获得。
...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangqin 2006-02-23
  • 打赏
  • 举报
回复
没代码谁知道是哪的问题?
gutty 2006-02-23
  • 打赏
  • 举报
回复
ScrollButton.js



//<script>
/*
* ScrollButton
*
* This script was designed for use with DHTML Menu 4
*
* This script was created by Erik Arvidsson
* (http://webfx.eae.net/contact.html#erik)
* for WebFX (http://webfx.eae.net)
* Copyright 2002
*
* For usage see license at http://webfx.eae.net/license.html
*
* Version: 1.02
* Created: 2002-05-28
* Updated: ??? Memory management updates
* 2003-09-23 Changed to using onunload instead onbeforeunload
*
*/

////////////////////////////////////////////////////////////////////////////////////
// scroolButtonCache
//

var scrollButtonCache = {
_count: 0,
_idPrefix: "-scroll-button-cache-",

getId: function () {
return this._idPrefix + this._count++;
},

remove: function ( o ) {
delete this[ o.id ];
}
};

function ScrollButton( oEl, oScrollContainer, nDir ) {
this.htmlElement = oEl;
this.scrollContainer = oScrollContainer;
this.dir = nDir;

this.id = scrollButtonCache.getId();
scrollButtonCache[ this.id ] = this;

this.makeEventListeners();
this.attachEvents();
}

ScrollButton.scrollIntervalPause = 100;
ScrollButton.scrollAmount = 18;

ScrollButton.prototype.startScroll = function () {
this._interval = window.setInterval(
"ScrollButton.eventListeners.oninterval(\"" + this.id + "\")",
ScrollButton.scrollIntervalPause );
};

ScrollButton.prototype.endScroll = function () {
if ( this._interval != null ) {
window.clearInterval( this._interval );
delete this._interval;
}
};

ScrollButton.prototype.makeEventListeners = function () {
if ( this.eventListeners != null )
return;

this.eventListeners = {
onmouseover: new Function( "ScrollButton.eventListeners.onmouseover(\"" + this.id + "\")" ),
onmouseout: new Function( "ScrollButton.eventListeners.onmouseout(\"" + this.id + "\")" ),
onunload: new Function( "ScrollButton.eventListeners.onunload(\"" + this.id + "\")" )
};
};

ScrollButton.prototype.attachEvents = function () {
if ( this.eventListeners == null )
return;

this.htmlElement.attachEvent( "onmouseover", this.eventListeners.onmouseover );
this.htmlElement.attachEvent( "onmouseout", this.eventListeners.onmouseout );
window.attachEvent( "onunload", this.eventListeners.onunload );
};

ScrollButton.prototype.detachEvents = function () {
if ( this.eventListeners == null )
return;

this.htmlElement.detachEvent( "onmouseover", this.eventListeners.onmouseover );
this.htmlElement.detachEvent( "onmouseout", this.eventListeners.onmouseout );
window.detachEvent( "onunload", this.eventListeners.onunload );
};

ScrollButton.prototype.destroy = function () {
this.endScroll();
this.detachEvents();

this.htmlElement = null;
this.scrollContainer = null;
this.eventListeners = null;

scrollButtonCache.remove( this );
};

ScrollButton.eventListeners = {
onmouseover: function ( id ) {
scrollButtonCache[id].startScroll();
},

onmouseout: function ( id ) {
scrollButtonCache[id].endScroll();
},

oninterval: function ( id ) {
var oThis = scrollButtonCache[id];
switch ( oThis.dir ) {
case 8:
oThis.scrollContainer.scrollTop -= ScrollButton.scrollAmount;
break;

case 2:
oThis.scrollContainer.scrollTop += ScrollButton.scrollAmount;
break;

case 4:
oThis.scrollContainer.scrollLeft -= ScrollButton.scrollAmount;
break;

case 6:
oThis.scrollContainer.scrollLeft += ScrollButton.scrollAmount;
break;
}
},

onunload: function ( id ) {
scrollButtonCache[id].destroy();
}
};
gutty 2006-02-23
  • 打赏
  • 举报
回复
menu.js



///////////////////////////////////////////////////////////////////////////////////
// menuCache
//

var menuCache = {
_count: 0,
_idPrefix: "-menu-cache-",

getId: function () {
return this._idPrefix + this._count++;
},

remove: function ( o ) {
delete this[ o.id ];
}
};

////////////////////////////////////////////////////////////////////////////////////
// Menu
//

function Menu() {
this.items = [];
this.parentMenu = null;
this.parentMenuItem = null;
this.popup = null;
this.shownSubMenu = null;
this._aboutToShowSubMenu = false;

this.selectedIndex = -1;
this._drawn = false;
this._scrollingMode = false;
this._showTimer = null;
this._closeTimer = null;

this._onCloseInterval = null;
this._closed = true;
this._closedAt = 0;

this._cachedSizes = {};
this._measureInvalid = true;

this.id = menuCache.getId();
menuCache[ this.id ] = this;
}

Menu.prototype.cssFile = "Class/winclassic.css"; //菜单风格文件
Menu.prototype.cssText = null;
Menu.prototype.mouseHoverDisabled = false;
Menu.prototype.showTimeout = 250;
Menu.prototype.closeTimeout = 250;

Menu.keyboardAccelKey = 27; // the keyCode for the key tp activate
Menu.keyboardAccelKey2 = 121; // the menubar
Menu.keyboardAccelProperty = "ctrlKey"; // when this property is true default
// actions will be canceled on a menu
// Use -1 to disable keyboard invoke of the menubar
// Use "" to allow all normal keyboard commands inside the menus

Menu.prototype.add = function ( mi, beforeMi ) {
if ( beforeMi != null ) {
var items = this.items;
var l = items.length;
var i = 0;
for ( ; i < l; i++ ) {
if ( items[i] == beforeMi )
break;
}
this.items = items.slice( 0, i ).concat( mi ).concat( items.slice( i, l ) );
// update itemIndex
for (var j = i; j < l + 1; j++)
this.items[j].itemIndex = j;
}
else {
this.items.push( mi );
mi.itemIndex = this.items.length - 1;
}

mi.parentMenu = this;
if ( mi.subMenu ) {
mi.subMenu.parentMenu = this;
mi.subMenu.parentMenuItem = mi;
}
return mi;
};

Menu.prototype.remove = function ( mi ) {
var res = [];
var items = this.items;
var l = items.length;
for (var i = 0; i < l; i++) {
if ( items[i] != mi ) {
res.push( items[i] );
items[i].itemIndex = res.length - 1;
}
}
this.items = res;
mi.parentMenu = null;
return mi;
};



Menu.prototype.toHtml = function () {

var items = this.items;
var l = items.length
var itemsHtml = new Array( l );
for (var i = 0; i < l; i++)
itemsHtml[i] = items[i].toHtml();

return "<html><head>" +
(this.cssText == null ?
"<link type=\"text/css\" rel=\"StyleSheet\" href=\"" + this.cssFile + "\" />" :
"<style type=\"text/css\">" + this.cssText + "</style>") +
"</head><body class=\"menu-body\">" +
"<div class=\"outer-border\"><div class=\"inner-border\">" +
"<table id=\"scroll-up-item\" cellspacing=\"0\" style=\"display: none\">" +
"<tr class=\"disabled\"><td>" +
"<span class=\"disabled-container\"><span class=\"disabled-container\">" +
"5" +
"</span></span>" + "</td></tr></table>" +
"<div id=\"scroll-container\">" +
"<table cellspacing=\"0\">" +

itemsHtml.join( "" ) +

"</table>" +
"</div>" +
"<table id=\"scroll-down-item\" cellspacing=\"0\" style=\"display: none\">" +
"<tr><td>" +
"<span class=\"disabled-container\"><span class=\"disabled-container\">" +
"6" +
"</span></span>" +
"</td></tr></table>" +
"</div></div>" +
"</body></html>";
};



太长了。。。。放不下。
gutty 2006-02-23
  • 打赏
  • 举报
回复
我也想贴,问题是代码太长了。。。

已经查到大概的原因了。
生成菜单的js用的是Erik Arvidsson的DHTML Menu 4
详见:http://webfx.eae.net (这个网站有很多有用的东东)

在改变浏览器字体后就会出现这种情况。

但把字体改回去也还是这样子。。。。
现在的问题是:怎么恢复正常?

我的电脑本来菜单显示正确的,现在也恢复不了了。

下面是posLib.js的代码。

//<script>
/*
* Position functions
*
* This script was designed for use with DHTML Menu 4
*
* This script was created by Erik Arvidsson
* (http://webfx.eae.net/contact.html#erik)
* for WebFX (http://webfx.eae.net)
* Copyright 2002
*
* For usage see license at http://webfx.eae.net/license.html
*
* Version: 1.1
* Created: 2002-05-28
* Updated: 2002-06-06 Rewrote to use getBoundingClientRect(). This solved
* several bugs related to relative and absolute positened
* elements
*
*
*/

// This only works in IE5 and IE6+ with both CSS1 and Quirk mode

var posLib = {

getIeBox: function (el) {
return this.ie && el.document.compatMode != "CSS1Compat";
},

// relative client viewport (outer borders of viewport)
getClientLeft: function (el) {
var r = el.getBoundingClientRect();
return r.left - this.getBorderLeftWidth(this.getCanvasElement(el));
},

getClientTop: function (el) {
var r = el.getBoundingClientRect();
return r.top - this.getBorderTopWidth(this.getCanvasElement(el));
},

// relative canvas/document (outer borders of canvas/document,
// outside borders of element)
getLeft: function (el) {
return this.getClientLeft(el) + this.getCanvasElement(el).scrollLeft;
},

getTop: function (el) {
return this.getClientTop(el) + this.getCanvasElement(el).scrollTop;
},

// relative canvas/document (outer borders of canvas/document,
// inside borders of element)
getInnerLeft: function (el) {
return this.getLeft(el) + this.getBorderLeftWidth(el);
},

getInnerTop: function (el) {
return this.getTop(el) + this.getBorderTopWidth(el);
},

// width and height (outer, border-box)
getWidth: function (el) {
return el.offsetWidth;
},

getHeight: function (el) {
return el.offsetHeight;
},

getCanvasElement: function (el) {
var doc = el.ownerDocument || el.document; // IE55 bug
if (doc.compatMode == "CSS1Compat")
return doc.documentElement;
else
return doc.body;
},

getBorderLeftWidth: function (el) {
return el.clientLeft;
},

getBorderTopWidth: function (el) {
return el.clientTop;
},

getScreenLeft: function (el) {
var doc = el.ownerDocument || el.document; // IE55 bug
var w = doc.parentWindow;
return w.screenLeft + this.getBorderLeftWidth(this.getCanvasElement(el)) +
this.getClientLeft(el);
},

getScreenTop: function (el) {
var doc = el.ownerDocument || el.document; // IE55 bug
var w = doc.parentWindow;
return w.screenTop + this.getBorderTopWidth(this.getCanvasElement(el)) +
this.getClientTop(el);
}
};

posLib.ua = navigator.userAgent;
posLib.opera = /opera [56789]|opera\/[56789]/i.test(posLib.ua);
posLib.ie = (!posLib.opera) && /MSIE/.test(posLib.ua);
posLib.ie6 = posLib.ie && /MSIE [6789]/.test(posLib.ua);
posLib.moz = !posLib.opera && /gecko/i.test(posLib.ua);







87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧