1. JavaScript / Говнокод #13432

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    var indparents = [72,74,62,6,71,783,3,63,67,76,75,61,4,65,5,73,199,195,70,2,69,68,64,66];
    var ev = "";
    var onmouse = [];
    var delayon = 100;
    var delayover = 200;
    var speedppd = 300;
    for (var indparent in indparents) {
    	var val=indparents[indparent];
    	ev += "$(\"div#indparent-"+val+"\").mouseleave(function(){window.onmouse["+val+"]=false;setTimeout(function(){if(!window.onmouse["+val+"]){$(\"div#indchild-"+val+"\").slideUp(window.speedppd);}},window.delayover);});$(\"div#indparent-"+val+"\").mouseenter(function(){window.onmouse["+val+"]=true;setTimeout(function(){if(window.onmouse["+val+"]){$(\"div#indchild-"+val+"\").slideDown(window.speedppd);}},window.delayon);});$(\"div#indchild-"+val+"\").mouseleave(function(){window.onmouse["+val+"]=false;setTimeout(function(){if(!window.onmouse["+val+"]){$(\"div#indchild-"+val+"\").slideUp(window.speedppd);}},window.delayover);});$(\"div#indchild-"+val+"\").mouseenter(function(){window.onmouse["+val+"]=true;setTimeout(function(){if(window.onmouse["+val+"]){$(\"div#indchild-"+val+"\").slideDown(window.speedppd);}},window.delayon);});";
    }
    $(document).ready(function(){eval(ev)});

    Эвалим~ Сегодня мы с тобой эвалим~

    Запостил: Stallman, 16 Июля 2013

    Комментарии (12) RSS

    • Пока читал, спустил два раза в трусы.
      Ответить
    • О ужас, как автор страдал, умещая всё в одну строку и экранируя кавычки, хотя мог бы использовать замыкания coolEval.

      function coolEval(func, values){
        var src = func.toString();
        return eval(values.map(function(value){
          return '(' + src.toString().replace(/val/g, value) + ')();';
        }).join(''));
      }
      Ответить
      • Если я правильно понял, eval() тут вообще не нужен.
        что выборку вида $('#indparent-'+val.toString()), что обращение к window.onmouse[val] можно замечательно сделать без eval().
        Ответить
        • Разумеется, Вы правы. onmouse помещается в замыкание и перестаёт быть массивом, с val - аналогично. После кэширования $("всякая фигня") вообще вызывается только, когда надо и код переписывается без единого эвала.
          Тот комментарий выше был всего лишь шуткой юмора, не покрашенной в зелёный.
          var indparents = [72,74,62,6,71,783,3,63,67,76,75,61,4,65,5,73,199,195,70,2,69,68,64,66];
          var delayon = 100;
          var delayover = 200;
          var speedppd = 300;
          
          function setHandlers(val){
              var indparent = $("div#indparent-"+val);
              var indchild = $("div#indchild-"+val);
              var onmouse;
              
              indparent.mouseleave(function(){
                onmouse=false;
                setTimeout(function(){
                  if(!onmouse) indchild.slideUp(window.speedppd);
                },window.delayover);
              });
              
              indparent.mouseenter(function(){
                onmouse=true;
                setTimeout(function(){
                  if(onmouse) indchild.slideDown(window.speedppd);
                },window.delayon);
              });
              
              indchild.mouseleave(function(){
                onmouse=false;
                setTimeout(function(){
                  if(!onmouse) indchild.slideUp(window.speedppd);
                },window.delayover);
              });
              
              indchild.mouseenter(function(){
                onmouse=true;
                setTimeout(function(){
                if(onmouse) indchild.slideDown(window.speedppd);
              },window.delayon);
            });
          }
          
          $(document).ready(function(){
            for (var indparent in indparents) 
              setHandlers(indparents[indparent]);
          });
          Ответить
          • Без контекста, к сожалению, не ясно, но там можно было обойтись и селектором по классу, не генерируя говномассив indparrents. :3
            Ответить
            • Да уже селектор div#indparents говно. =J
              Ответить
              • Попробую найти ему оправдание: он будет срабатывать на #indparents на тех страницах, где с таким айдишником див, но не будет срабатывать на тех страницах, где id=indparents назначен другому элементу, например, спану.

                Да, извращение, но право на жизнь имеет.
                Ответить
                • Это все равно, что мороженное лизать анусом.
                  Ответить
          • Вот лучше бы ты полноразмерный код запостил отдельным комментом и мы бы его закрыли спойлером, чем читать это мелкое дерьмо. Сделай мои глаза развидеть это
            Ответить
            • Специальный вариант для любителей минуснуть:
              var indparents = [72,74,62,6,71,783,3,63,67,76,75,61,4,65,5,73,199,195,70,2,69,68,64,66];
              var delayon = 100, delayover = 200, speedppd = 300;
              
              $(document).ready(function(){
                for (var ip in indparents) (function(v){
                  var om, oml, ome, ic = $("div#indchild-" + v);
                  
                  function on(omv, act, del) {
                    return function(){
                      om = omv;
                      setTimeout(function(){ 
                        if(om == omv) ic[act](speedppd); 
                      }, window[del]);
                    } 
                  }
                  
                  $("div#indparent-" + v).
                    mouseleave(oml = on(!1, 'slideUp', 'delayover')).
                    mouseenter(ome = on(!0, 'slideDown', 'delayon'));
                    
                  ic.mouseleave(oml).mouseenter(ome);
                  
                })(indparents[ip]);
              });
              Ответить

    Добавить комментарий