• Страница 1 из 1
  • 1
Форум Studio AD » Сайтостроение » Общий форум по Javascript » Сжатие без потерь
Сжатие без потерь
SkaZzzz
Дата: Среда, 05.05.2010, 13:56 | Сообщение # 1
молчун
Группа: Проверенные
Пользователь №: 2986
Сообщений: 28
Здравствуйте, мне бы хотелось узнать, а можно-ли сжать или сократить данный 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////////////////////////

dropmenuobj: null, asscmenuitem: null, domsupport: document.all || document.getElementById, standardbody: null, iframeshimadded: false, revealtimers: {},

getposOffset:function(what, offsettype){
  var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
  var parentEl=what.offsetParent;
  while (parentEl!=null){
   totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
   parentEl=parentEl.offsetParent;
  }
  return totaloffset;
},

css:function(el, targetclass, action){
  var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
  if (action=="check")
   return needle.test(el.className)
  else if (action=="remove")
   el.className=el.className.replace(needle, "")
  else if (action=="add" && !needle.test(el.className))
   el.className+=" "+targetclass
},

showmenu:function(dropmenu, e){
  if (this.enablereveal[0]){
   if (!dropmenu._trueheight || dropmenu._trueheight<10)
    dropmenu._trueheight=dropmenu.offsetHeight
   clearTimeout(this.revealtimers[dropmenu.id])
   dropmenu.style.height=dropmenu._curheight=0
   dropmenu.style.overflow="hidden"
   dropmenu.style.visibility="visible"
   this.revealti mers[dropmenu.id]=setInterval(function(){cssdropdown.revealmenu(dropmenu)}, 10)
  }
  else{
   dropmenu.style.visibility="visible"
  }
  this.css(this.asscmenuitem, "selected", "add")
},

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
},

hidemenu:function(){
  this.css(this.asscmenuitem, "selected", "remove")
  this.dropmenuobj.style.visibility='hidden'
  this.dropmenuobj.style.left=this.dropmenuobj.style.top="-1000px"
  this.hideshim()
} ,

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

}

Без потери данных, то есть чтобы он был в рабочем состоянии. А то я пытался сжать, сжимается, но становиться не рабочим.... Помогите плиз :'(
  
WRC
Дата: Среда, 05.05.2010, 15:16 | Сообщение # 2
говорун
Группа: Проверенные
Пользователь №: 223
Сообщений: 149
Получено оценок: 11
SkaZzzz, с начало пытайся сделать скрипт в одну строчку, не спеша и каждый раз проверяя... как только увидишь что скрипт не работает разбирайся в чём дело (в большинстве случаев нужно поставить ";" за место переноса строки...)

Устраняем баг при просмотре материала
  
Aleko
Дата: Среда, 05.05.2010, 17:00 | Сообщение # 3
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
SkaZzzz, в скрипте есть ошибки.

Бесплатные обои.
  
SkaZzzz
Дата: Среда, 05.05.2010, 23:33 | Сообщение # 4
молчун
Группа: Проверенные
Пользователь №: 2986
Сообщений: 28
WRC, я и так просидел несколько часов, пытался найти в чём возможна была проблема, при который скрипт переставал работать, но так и не нашёл, по-этому попросил помощи на вашем форуме.
Aleko, :( ёпрст.... Aleko, пожалуйста, если не трудно поможешь хоть как-нибудь сжать и если можно исправить ошибки в этом скрипте... А то долго сидел думал, уже мозги вскипели... Мне не к спеху, но желательно было бы в течение недели его полностью сделать.... :'( Если кто-то может, помогите плиз.... Заранее спасибо...
  
Aleko
Дата: Четверг, 06.05.2010, 10:01 | Сообщение # 5
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
SkaZzzz, был пробел в 39 строке. Я исправил и сжал. Если это раньше работало то должно работать и сейчас.

3 с копейками килобайта:

Code
<script>eval((function(TINY){return 'F 8={13:250,U:"",T:[23,4],Z:1,3:1I,I:1I,1H:7.1Y||7.D,9:1I,B:20,L:{},S:5(d,c){F b=(c=="Y")?d.1K:d.1R;F a=d.1B;2A(a!=1I){b=(c=="Y")?b+a.1K:b+a.1R;a=a.1B}O b},2C:5(b,a,c){F d=new RegExp("(^|\\\\s+)"+a+"($|\\\\s+)","ig");M(c=="check"){O d.2G(b.N)}12{M(c=="27"){b.N=b.N.replace(d,"")}12{M(c=="2K"&&!d.2G(b.N)){b.N+=" "+a}}}},1W:5(b,a){M(2.T[0]){M(!b.E||b.E<2L){b.E=b.J}16(2.L[b.2E]);b.6.19=b.11=0;b.6.1X="1O";b.6.P="1F";2.L[b.2E]=setInterval(5(){8.1J(b)},2L)}12{b.6.P="1F"}2.2C(2.I,"1U","2K")},1J:5(f,d){F e=f.11,b=f.E,a=2.T[1];M(e<b){F c=2F.min(e,b);f.6.19=c+"22";f.11=c+2F.round((b-c)/a)+1}12{f.6.19="auto";f.6.1X="1O";clearInterval(2.L[f.2E])}},K:5(f,d){F c=0;M(d=="1P"){F e=7.1Y&&!C.21?2.9.scrollLeft+2.9.clientWidth-2J:C.pageXOffset+C.innerWidth-2J;F b=2.3.X;M(e-2.3.x<b){c=b-f.X}}12{F a=7.1Y&&!C.21?2.9.1Q:C.1D;F e=7.1Y&&!C.21?2.9.1Q+2.9.clientHeight-2J:C.1D+C.innerHeight-18;F g=2.3.E;M(e-2.3.y<g){c=g+f.J;M((2.3.y-a)<g){c=2.3.y+f.J-a}}}O c},25:5(c,b,a){M(2.3!=1I){2.17()}2.Q();2.3=7.D(a);2.I=c;2.1W(2.3,b);2.3.x=2.S(c,"Y");2.3.y=2.S(c,"1L");2.3.6.Y=2.3.x-2.K(c,"1P")+"22";2.3.6.1L=2.3.y-2.K(c,"bottomedge")+c.J+1+"22";2.1A()},1A:5(){M(2.B){M(2.3.6.P=="1F"){2.A.6.width=2.3.X+"22";2.A.6.19=2.3.E+"22";2.A.6.Y=1V(2.3.6.Y)+"22";2.A.6.1L=1V(2.3.6.1L)+"22";2.A.6.1E="block"}}},1T:5(){M(2.B){2.A.6.1E="2D"}},W:5(a,b){F b=C.1Z||b;F d=b.relatedTarget||((b.type=="14")?b.fromElement:b.toElement);2A(d&&d!=a){2H{d=d.parentNode}29(b){d=a}}M(d==a){O 23}12{O 20}},V:5(a,b){M(!2.W(a,b)){2.H()}},H:5(){2.15=setTimeout("8.17()",2.13)},17:5(){2.2C(2.I,"1U","27");2.3.6.P="1O";2.3.6.Y=2.3.6.1L="-1000px";2.1T()},Q:5(){M(2.15!="undefined"){16(2.15)}},G:5(b,c,a){M(b.10){b.10(a,c,20)}12{M(b.1C){b.1C("on"+a,5(){O c.call(b,C.1Z)})}}},startchrome:5(){M(!2.1H){O}2.9=(7.compatMode=="CSS1Compat")?7.documentElement:7.body;2I(F d=0;d<1N.26;d++){F g=7.D(1N[d]).getElementsByTagName("a");2I(F b=0;b<g.26;b++){M(g[b].R("2B")){F a=g[b].R("2B");F c=7.D(a);2.G(c,5(){8.Q()},"14");2.G(c,5(h){8.V(2,h)},"1S");2.G(c,5(){8.H()},"28");2H{g[b].1M=g[b].1M+" "+2.U}29(f){}2.G(g[b],5(i){M(!8.W(2,i)){F h=C.1Z||i;8.25(2,h,2.R("2B"))}},"14");2.G(g[b],5(h){8.V(2,h)},"1S");2.G(g[b],5(){8.H()},"28")}}}M(2.Z&&7.1Y&&!C.XDomainRequest&&!2.B){7.write(\'<24 2E="1G" src="about:blank" frameBorder="0" scrolling="no" 6="Y:0; 1L:0; position:absolute; 1E:2D;z-index:90; background: transparent;"></24>\');2.A=7.D("1G");2.A.6.filter="progid:DXImageTransform.Microsoft.Alpha(6=0,opacity=0)";2.B=23}}}'.replace(/\w+/g,function(_){return TINY[-/[a-z]/.test(_)|parseInt(_,36)]||_})})('||this|dropmenuobj||function|style|document|cssdropdown|standardbody|shimobject|iframeshimadded|window|getElementById|_trueheight|v ar|addEvent|delayhidemenu|asscmenuitem|offsetHeight|clearbrowseredge|revealtimers|if|className|return|visibility|clearhidemenu|getAttribute| getposOffset|enablereveal|dropdownindicator|dynamichide|isContained|offsetWidth|left|enableiframeshim|addEventListener|_curheight|else|disap peardelay|mouseover|delayhide|clearTimeout|hidemenu||height|positionshim|offsetParent|attachEvent|pageYOffset|display|visible|iframeshim|dom support|null|revealmenu|offsetLeft|top|innerHTML|arguments|hidden|rightedge|scrollTop|offsetTop|mouseout|hideshim|selected|parseInt|showmenu |overflow|all|event|false|opera|px|true|IFRAME|dropit|length|remove|click|catch|while|rel|css|none|id|Math|test|try|for|15|add|10'.split('|' )))</script>


Бесплатные обои.
  
SkaZzzz
Дата: Четверг, 06.05.2010, 16:48 | Сообщение # 6
молчун
Группа: Проверенные
Пользователь №: 2986
Сообщений: 28
Aleko, спасибо тебе огромное ad :) век не забуду (: можно закрыть тему ^^ thx
  
SkaZzzz
Дата: Четверг, 06.05.2010, 17:30 | Сообщение # 7
молчун
Группа: Проверенные
Пользователь №: 2986
Сообщений: 28
Ох, нет :( даже при вашем сжатии он перестал работать :( И самое главное, что я никак не пойму из-за чего оно не работает.... (P.S. этот скрипт разворачивает подменю при наведении мышкой на основное меню, когда убирается мышка, подменю снова сворачивается)

Сообщение отредактировал SkaZzzz - Четверг, 06.05.2010, 17:32
  
Raiderr
Дата: Четверг, 06.05.2010, 18:27 | Сообщение # 8
болтун
Группа: Проверенные
Пользователь №: 673
Сообщений: 349
Получено оценок: 26
SkaZzzz, епать, какой код, и только выворачивает и сворачивает меню. Не проще через jq сделать?

Новый кавер Jar of Hearts: http://www.youtube.com/watch?v=OLkXQMHVRhI
  
SkaZzzz
Дата: Четверг, 06.05.2010, 19:05 | Сообщение # 9
молчун
Группа: Проверенные
Пользователь №: 2986
Сообщений: 28
Raiderr, :D не мне надо именно с помощью этого js кода.... Так как меню, вроде бы ток на нём работает....
  
Aleko
Дата: Четверг, 06.05.2010, 23:24 | Сообщение # 10
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
$WARNING$ Raiderr, получаешь замечание. Мат запрещен.

Бесплатные обои.
  
Aleko
Дата: Четверг, 06.05.2010, 23:26 | Сообщение # 11
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
SkaZzzz, напиши код ошибки которая выдается.

В ie нужно щелкнуть по значку алерта в статус баре, в лисе выбрать инструменты>консоль ошибок, в опере примерно так же.


Бесплатные обои.
  
WRC
Дата: Пятница, 07.05.2010, 06:14 | Сообщение # 12
говорун
Группа: Проверенные
Пользователь №: 223
Сообщений: 149
Получено оценок: 11
дело в том что в этом коде нет ; после каждого выражения...
то есть вот из кода в глаза бросается:
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>


Устраняем баг при просмотре материала

Сообщение отредактировал WRC - Пятница, 07.05.2010, 06:16
  
SkaZzzz
Дата: Пятница, 07.05.2010, 11:02 | Сообщение # 13
молчун
Группа: Проверенные
Пользователь №: 2986
Сообщений: 28
Aleko, вот ошибка, которая показывает, когда я подключаю твой js скрипт:
Code
missing ; before statement

Я ещё хотел второй скрипт сжать (нашёл в интернете) он тоже сворачивает и разворачивает меню, только на этот раз вертикальное, и он также не работает, после сжатия....
  
Aleko
Дата: Пятница, 07.05.2010, 18:19 | Сообщение # 14
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
SkaZzzz, блин. uCoz говняет длинный код лишними переносами. В этом дело. Сжатый код в аттаче поста:
Прикрепления: compressed.js (3.3 Kb)


Бесплатные обои.
  
SkaZzzz
Дата: Суббота, 08.05.2010, 03:19 | Сообщение # 15
молчун
Группа: Проверенные
Пользователь №: 2986
Сообщений: 28
Aleko, спасибо, однако возникает другая проблема.... Дело в том, что твой сжатый скрипт, который ты дал мне, блокирует второй. То есть раздвижное вертикальное меню не работает, а горизонтальное работает. Так вот я уж и не знаю, что мне делать....
Quote
Как говориться не понос, так золотуха....

Aleko, знаю что уже замучил, но поможешь объединить эти 2 скрипта, так что бы работали? Если нет, то пусть так и останутся, ьез сжатия....
P.S. topmenu.js - это тот скрипт, который сжимали.
Прикрепления: menu.js (7.6 Kb) · topmenu.js (6.4 Kb)


Сообщение отредактировал SkaZzzz - Суббота, 08.05.2010, 03:19
  
Форум Studio AD » Сайтостроение » Общий форум по Javascript » Сжатие без потерь
  • Страница 1 из 1
  • 1
Поиск:
© Studioad.ru 2006 · 2010. Использование материалов форума на сторонних ресурсах без прямой обратной ссылки строго запрещено. Хостинг от uCoz.