Здравствуйте, мне бы хотелось узнать, а можно-ли сжать или сократить данный js:
Code
var cssdropdown={ disappeardelay: 250, //set delay in miliseconds before menu disappears onmouseout dropdownindicator: '', //specify full HTML to add to end of each menu item with a drop down menu enablereveal: [true, 4], //enable swipe effect? [true/false, steps (Number of animation steps. Integer between 1-20. Smaller=faster)] enableiframeshim: 1, //enable "iframe shim" in IE5.5 to IE7? (1=yes, 0=no)
//No need to edit beyond here////////////////////////
revealmenu:function(dropmenu, dir){ var curH=dropmenu._curheight, maxH=dropmenu._trueheight, steps=this.enablereveal[1] if (curH<maxH){ var newH=Math.min(curH, maxH) dropmenu.style.height=newH+"px" dropmenu._curheight= newH + Math.round((maxH-newH)/steps) + 1 } else{ //if done revealing menu dropmenu.style.height="auto" dropmenu.style.overflow="hidden" clearInterval(this.revealtimers[dropmenu.id]) } },
clearbrowseredge:function(obj, whichedge){ var edgeoffset=0 if (whichedge=="rightedge"){ var windowedge=document.all && !window.opera? this.standardbody.scrollLeft+this.standardbody.clientWidth-15 : window.pageXOffset+window.innerWidth-15 var dropmenuW=this.dropmenuobj.offsetWidth if (windowedge-this.dropmenuobj.x < dropmenuW) //move menu to the left? edgeoffset=dropmenuW-obj.offsetWidth } else{ var topedge=document.all && !window.opera? this.standardbody.scrollTop : window.pageYOffset var windowedge=document.all && !window.opera? this.standardbody.scrollTop+this.standardbody.clientHeight-15 : window.pageYOffset+window.innerHeight-18 var dropmenuH=this.dropmenuobj._trueheight if (windowedge-this.dropmenuobj.y < dropmenuH){ //move up? edgeoffset=dropmenuH+obj.offsetHeight if ((this.dropmenuobj.y-topedge)<dropmenuH) //up no good either? edgeoffset=this.dropmenuobj.y+obj.offsetHeight-topedge } } return edgeoffset },
dropit:function(obj, e, dropmenuID){ if (this.dropmenuobj!=null) //hide previous menu this.hidemenu() //hide menu this.clearhidemenu() this.dropmenuobj=document.getElementById(dropmenuID) //reference drop down menu this.asscmenuitem=obj //reference associated menu item this.showmenu(this.dropmenuobj, e) this.dropmenuobj.x=this.getposOffset(obj, "left") this.dropmenuobj.y=this.getposOffset(obj, "top") this.dropmenuobj.style.left=this.dropmenuobj.x-this.clearbrowseredge(obj, "rightedge")+"px" this.dropmenuobj.style.top=this.dropmenuobj.y-this.clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+1+"px" this.positionshim() //call iframe shim function },
positionshim:function(){ //display iframe shim function if (this.iframeshimadded){ if (this.dropmenuobj.style.visibility=="visible"){ this.shimobject.style.width=this.dropmenuobj.offsetWidth+"px" this.shimobject.style. height=this.dropmenuobj._trueheight+"px" this.shimobject.style.left=parseInt(this.dropmenuobj.style.left)+"px" this.shimobject.style .top=parseInt(this.dropmenuobj.style.top)+"px" this.shimobject.style.display="block" } } },
hideshim:function(){ if (this.iframeshimadded) this.shimobject.style.display='none' },
isContained:function(m, e){ var e=window.event || e var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement) while (c && c!=m)try {c=c.parentNode} catch(e){c=m} if (c==m) return true else return false },
dynamichide:function(m, e){ if (!this.isContained(m, e)){ this.delayhidemenu() } },
delayhidemenu:function(){ this.delayhide=setTimeout("cssdropdown.hidemenu()", this.disappeardelay) //hide menu },
clearhidemenu:function(){ if (this.delayhide!="undefined") clearTimeout(this.delayhide) },
addEvent:function(target, functionref, tasktype){ if (target.addEventListener) target.addEventListener(tasktype, functionref, false); else if (target.attachEvent) target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)}); },
startchrome:function(){ if (!this.domsupport) return this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body for (var ids=0; ids<arguments.length; ids++){ var menuitems=document.getElementById(arguments[ids]).getElementsByTagName("a") for (var i=0; i<menuitems.length; i++){ if (menuitems[i].getAttribute("rel")){ var relvalue=menuitems[i].getAttribute("rel") var asscdropdownmenu=document.getElementById(relvalue) this.addEvent(asscdropdownmenu, function(){cssdropdown.clearhidemenu()}, "mouseover") this.addEvent(asscdropdownmenu, function(e){cssdropdown.dynamichide(this, e)}, "mouseout") this.addEvent(asscdropdownmenu, function(){cssdropdown.delayhidemenu()}, "click") try{ menuitems[i].innerHTML=menuitems[i].innerHTML+" "+this.dropdownindicator }catch(e){} this.addEvent(menuitems[i], function(e){ //show drop down menu when main menu items are mouse over-ed if (!cssdropdown.isContained(this, e)){ var evtobj=window.event || e cssdropdown.dropit(this, evtobj, this.getAttribute("rel")) } }, "mouseover") this.addEvent(menuitems[i], function(e){cssdropdown.dynamichide(this, e)}, "mouseout") //hide drop down menu when main menu items are mouse out this.addEvent(menuitems[i], function(){cssdropdown.delayhidemenu()}, "click") //hide drop down menu when main menu items are clicked on } } //end inner for } //end outer for if (this.enableiframeshim && document.all && !window.XDomainRequest && !this.iframeshimadded){ //enable iframe shim in IE5.5 thru IE7? document.write('<IFRAME id="iframeshim" src="about:blank" frameBorder="0" scrolling="no" style="left:0; top:0; position:absolute; display:none;z-index:90; background: transparent;"></IFRAME>') this.shimobject=document.getElementById("iframeshim") //reference iframe object this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)' this.iframeshimadded=true } } //end startchrome
}
Без потери данных, то есть чтобы он был в рабочем состоянии. А то я пытался сжать, сжимается, но становиться не рабочим.... Помогите плиз
SkaZzzz, с начало пытайся сделать скрипт в одну строчку, не спеша и каждый раз проверяя... как только увидишь что скрипт не работает разбирайся в чём дело (в большинстве случаев нужно поставить ";" за место переноса строки...) Устраняем баг при просмотре материала
WRC, я и так просидел несколько часов, пытался найти в чём возможна была проблема, при который скрипт переставал работать, но так и не нашёл, по-этому попросил помощи на вашем форуме. Aleko, ёпрст.... Aleko, пожалуйста, если не трудно поможешь хоть как-нибудь сжать и если можно исправить ошибки в этом скрипте... А то долго сидел думал, уже мозги вскипели... Мне не к спеху, но желательно было бы в течение недели его полностью сделать.... Если кто-то может, помогите плиз.... Заранее спасибо...
Ох, нет даже при вашем сжатии он перестал работать И самое главное, что я никак не пойму из-за чего оно не работает.... (P.S. этот скрипт разворачивает подменю при наведении мышкой на основное меню, когда убирается мышка, подменю снова сворачивается)
Сообщение отредактировал SkaZzzz - Четверг, 06.05.2010, 17:32
дело в том что в этом коде нет ; после каждого выражения... то есть вот из кода в глаза бросается:
Code
<script> this.shimobject=document.getElementById("iframeshim") this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style =0,opacity=0)' //^так всё робит... //но при сжатии программа делает скрипт с начало в одну строчку: this.shimobject=document.getElementById("iframeshim")this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0 ,opacity=0)' //естественно выдаст ошибку //поэтому нужно за место первого писать так: this.shimobject=document.getElementById("iframeshim"); this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style =0,opacity=0)'; </script>
Aleko, вот ошибка, которая показывает, когда я подключаю твой js скрипт:
Code
missing ; before statement
Я ещё хотел второй скрипт сжать (нашёл в интернете) он тоже сворачивает и разворачивает меню, только на этот раз вертикальное, и он также не работает, после сжатия....
Aleko, спасибо, однако возникает другая проблема.... Дело в том, что твой сжатый скрипт, который ты дал мне, блокирует второй. То есть раздвижное вертикальное меню не работает, а горизонтальное работает. Так вот я уж и не знаю, что мне делать....
Quote
Как говориться не понос, так золотуха....
Aleko, знаю что уже замучил, но поможешь объединить эти 2 скрипта, так что бы работали? Если нет, то пусть так и останутся, ьез сжатия.... P.S. topmenu.js - это тот скрипт, который сжимали.