Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

DHTML Slide menu problem

Status
Not open for further replies.

Guest_imported

New member
Jan 1, 1970
0
I am using a dhtml slide menu...........When you place your mouse over a link a menu appears onto the screen, stays for a specified amount of time then dissapears. The menus appear fast and smooth in IE5 but are very sluggish and jerky in NS6.1.....Can anyone tell me why and is there a way to fix it?
 
Need Help --
What is the URL of the site?? BUt if it's in a *.js file, look at the coding for the NS portion and check to see if 'speed' is one of the attributes that can be edited... I have not failed; I merely found 100,000 different ways of not succeding...
 
here is the external .js file

SlideMenu.Registry = []
SlideMenu.aniLen = 200
SlideMenu.hideDelay = 5000
SlideMenu.minCPUResolution = 5

// constructor
function SlideMenu(id, dir, left, top, width, height)
{
this.ie = document.all ? 1 : 0
this.ns4 = document.layers ? 1 : 0
this.dom = document.getElementById ? 1 : 0

if (this.ie || this.ns4 || this.dom) {
this.id = id
this.dir = dir
this.orientation = dir == "left" || dir == "right" ? "h" : "v"
this.dirType = dir == "right" || dir == "down" ? "-" : "+"
this.dim = this.orientation == "h" ? width : height
this.hideTimer = false
this.aniTimer = false
this.open = false
this.over = false
this.startTime = 0

// global reference to this object
this.gRef = "SlideMenu_"+id
eval(this.gRef+"=this")

// add this menu object to an internal list of all menus
SlideMenu.Registry[id] = this

var d = document
d.write('<style type=&quot;text/css&quot;>')
d.write('#' + this.id + 'Container { visibility:hidden; ')
d.write('left:' + left + 'px; ')
d.write('top:' + top + 'px; ')
d.write('overflow:hidden; }')
d.write('#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; ')
d.write('width:' + width + 'px; ')
d.write('height:' + height + 'px; ')
d.write('clip:rect(0 ' + width + ' ' + height + ' 0); ')
d.write('}')
d.write('</style>')

this.load()
}
}

SlideMenu.prototype.load = function() {
var d = document
var lyrId1 = this.id + &quot;Container&quot;
var lyrId2 = this.id + &quot;Content&quot;
var obj1 = this.dom ? d.getElementById(lyrId1) : this.ie ? d.all[lyrId1] : d.layers[lyrId1]
if (obj1) var obj2 = this.ns4 ? obj1.layers[lyrId2] : this.ie ? d.all[lyrId2] : d.getElementById(lyrId2)
var temp

if (!obj1 || !obj2) window.setTimeout(this.gRef + &quot;.load()&quot;, 100)
else {
this.container = obj1
this.menu = obj2
this.style = this.ns4 ? this.menu : this.menu.style
this.homePos = eval(&quot;0&quot; + this.dirType + this.dim)
this.outPos = 0
this.accelConst = (this.outPos - this.homePos) / SlideMenu.aniLen / SlideMenu.aniLen

// set event handlers.
if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
this.menu.onmouseover = new Function(&quot;SlideMenu.showMenu('&quot; + this.id + &quot;')&quot;)
this.menu.onmouseout = new Function(&quot;SlideMenu.hideMenu('&quot; + this.id + &quot;')&quot;)

//set initial state
this.endSlide()
}
}

SlideMenu.showMenu = function(id)
{
window.status = id
var reg = SlideMenu.Registry
var obj = SlideMenu.Registry[id]

if (obj.container) {
obj.over = true

// close other menus.
for (menu in reg) if (id != menu) SlideMenu.hide(menu)

// if this menu is scheduled to close, cancel it.
if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) }

// if this menu is closed, open it.
if (!obj.open && !obj.aniTimer) reg[id].startSlide(true)
}
}

SlideMenu.hideMenu = function(id)
{
// schedules the menu to close after <hideDelay> ms, which
// gives the user time to cancel the action if they accidentally moused out
var obj = SlideMenu.Registry[id]
if (obj.container) {
if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
obj.hideTimer = window.setTimeout(&quot;SlideMenu.hide('&quot; + id + &quot;')&quot;, SlideMenu.hideDelay);
}
}

SlideMenu.hide = function(id)
{
var obj = SlideMenu.Registry[id]
obj.over = false

if (obj.hideTimer) window.clearTimeout(obj.hideTimer)

// flag that this scheduled event has occured.
obj.hideTimer = 0

// if this menu is open, close it.
if (obj.open && !obj.aniTimer) obj.startSlide(false)
}

SlideMenu.prototype.startSlide = function(open) {
this.open = open
if (open) this.setVisibility(true)
this.startTime = (new Date()).getTime()
this.aniTimer = window.setInterval(this.gRef + &quot;.slide()&quot;, SlideMenu.minCPUResolution)
}

SlideMenu.prototype.slide = function() {
var elapsed = (new Date()).getTime() - this.startTime
if (elapsed > SlideMenu.aniLen) this.endSlide()
else {
var d = Math.round(Math.pow(SlideMenu.aniLen-elapsed, 2) * this.accelConst)
if (this.open && this.dirType == &quot;-&quot;) d = -d
else if (this.open && this.dirType == &quot;+&quot;) d = -d
else if (!this.open && this.dirType == &quot;-&quot;) d = -this.dim + d
else d = this.dim + d

this.moveTo(d)
}
}

SlideMenu.prototype.endSlide = function() {
this.aniTimer = window.clearTimeout(this.aniTimer)
this.moveTo(this.open ? this.outPos : this.homePos)
if (!this.open) this.setVisibility(false)
if ((this.open && !this.over) || (!this.open && this.over)) {
this.startSlide(this.over)
}
}

SlideMenu.prototype.setVisibility = function(bShow) {
var s = this.ns4 ? this.container : this.container.style
s.visibility = bShow ? &quot;visible&quot; : &quot;hidden&quot;
}
SlideMenu.prototype.moveTo = function(p) {
this.style[this.orientation == &quot;h&quot; ? &quot;left&quot; : &quot;top&quot;] = p
}
SlideMenu.prototype.getPos = function(c) {
return parseInt(this.style[c])
}

 
Hi, in the HTML file is there any script coding in there?? The external file, mentions nothing on the speed depending on the browser. The only thing I see here is the SlideMenu.hideDelay = 5000, this means how fast (or slow) the menu will appear.
Maybe its not the coding, maybe its just the NS6 thats messes it up. They changed NS6 and its worse then NS4.7... I have not failed; I merely found 100,000 different ways of not succeding...
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top