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

    +155

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    this.resize = function(d) {
        var curSize, newSize;
        if (DOM && settings.resiziable === true) {
            curSize = $(DOM).height();
            if (d < 0) {
                if (settings.min) {
                    if (curSize + d < settings.min) {
                        newSize = settings.min;
                    } else {
                        newSize = curSize + d;
                    }
                } else {
                    newSize = curSize + d;
                }
            } else {
                if (settings.max) {
                    if (curSize + d > settings.max) {
                        newSize = settings.max;
                    } else {
                        newSize = curSize + d;
                    }
                } else {
                    newSize = curSize + d;
                }
            }
    
            if (newSize !== curSize) {
                $(DOM).height(newSize);
            }
        }
    };

    Что-то меня корёжит немного от этого метода.

    Запостил: dunmaksim, 14 Июля 2014

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

    • Возвращение человека оптимизатора
      this.resize = function(d) {
          if (DOM && settings.resiziable) {
              curSize = $(DOM).height();
      		newSize = curSize + d;
              if (newSize < settings.min)
                  newSize = settings.min;
              if (newSize > settings.max)
                  newSize = settings.max;
              if (newSize !== curSize) {
                  $(DOM).height(newSize);
              }
          }
      };
      Ответить
      • - if (newSize < settings.min)
        + if (d < 0 && settings.min && newSize < settings.min)
        - if (newSize > settings.max)
        + if (d > 0 && settings.max && newSize > settings.max)
        Как-то так.
        Ответить
        • меркуриалом подрабатываешь?) Я думаю, что минимум и максимум должны уже быть известными при отрисовке, и это - говно архитектуры
          Ответить
          • > минимум и максимум должны уже быть известными при отрисовке
            Судя про проверке они могут быть опциональными. Поэтому я ее и вернул.
            Ответить
            • тогда при настройке должны задаваться.

              чето типа settings.min = min||0

              все лучше чем проверять при каждой отрисовке. а d<0 при заданных настройках лишняя проверка.
              Ибо
              (d < 0 && newSize < settings.min)
              (d > 0 && newSize > settings.max)
              - минимум 3 проверки , а

              (newSize < settings.min)
              (newSize > settings.max)
              две
              Ответить
              • > при каждой отрисовке
                Да какая ж это отрисовка? Функция же называется resize().

                > чето типа settings.min = min||0
                А в max infinity засунешь? :)
                Ответить
                • сорри, оплошал. Это инстинкт - когда ресайзится - тогда и перерисовывается.
                  Ответить
                  • > Это инстинкт - когда ресайзится - тогда и перерисовывается.
                    Ну оно, скорее всего, и правда перерисуется после ресайза. Но на следующие перерисовки этот код уже не вызовется. А на newSize > 0 скорее всего жкверовский height проверит, лень смотреть в ман.
                    Ответить
                • а почему нет?) По логике кода - один хрен)
                  Ответить
            • Всё верно, эти ограничения при создании объекта задавать не обязательно, в этом случае они игнорируются и панельку можно свернуть до нуля. При изменении размера тут же происходит перерисовка. Это крайне не оптимальный код, и даже говорят, что лучше сначала показывать фантом, а уже потом при необходимости делать перерисовку оригинала, но мы не ищем лёгких (точнее, правильных) путей.
              Ответить
      • Возвращение Царя? Но он бы не одобрил повторное вычисление $(DOM) и использование jQuery, если бы его привязали к стулу и заставили полюбить JavaScript.
        Ответить
        • >>повторное вычисление $(DOM)

          блядь, проморгал

          >> использование jQuery

          а тут я не против. Руками больно и противно
          Ответить
          • > Руками больно и противно
            Юзай тосол или что там на геймдеве предлагалось...
            Ответить
            • >>Юзай тосол или что там на геймдеве предлагалось...

              Тарас?
              Ответить
            • Дык яж ему кидал ссылку: "как сделать резиновую пизденку из перчатки, пары губок для посуды и стакана."
              Ответить
        • > повторное вычисление $(DOM)
          Да вроде это дешевая операция. Но да, лишнее выделение памяти.
          Ответить
    • показать все, что скрытоVanished
      Ответить

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