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

    +142

    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
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    "use strict"
            var carousel = document.getElementById("carousel");
            var carouselItems = document.getElementsByClassName("carousel-item");
            var carouselIndecarors = document.getElementsByClassName("carousel-indicator");
            var carouselActiveInt = 0;
            var carouselInterval;
            
            var carouselRefresh = function(){
                
            }
            
            for(var i=0;i<document.getElementsByClassName("carousel-indicator").length;i++){
                document.getElementsByClassName("carousel-indicator")[i].onclick = function(){carouselIndecarorChange(this)};
            }
            var carouselIndecarorChange = function(id){
                carouselItems[carouselActiveInt].classList.toggle("carousel-item__active");
                carouselIndecarors[carouselActiveInt].classList.toggle("carousel-indicator__active");
                
                carouselActiveInt = id.getAttribute("data-slide-to");
                
                carouselItems[carouselActiveInt].classList.toggle("carousel-item__active");
                carouselIndecarors[carouselActiveInt].classList.toggle("carousel-indicator__active");
    
            }
            
            
            
            
            
            var carouselNext = function(){
                            console.log(carouselActiveInt);
                
                            carouselItems[carouselActiveInt].classList.toggle("carousel-item__active");
                            carouselIndecarors[carouselActiveInt].classList.toggle("carousel-indicator__active");
                
                        if(carouselActiveInt == carouselItems.length-1){
                            carouselActiveInt=0;
                        }
                        else{
                            carouselActiveInt++;
                        }
                            carouselItems[carouselActiveInt].classList.toggle("carousel-item__active");
                            carouselIndecarors[carouselActiveInt].classList.toggle("carousel-indicator__active");
            }
    
            
            
    		var carouselAutoPlay = function(time){
                carouselInterval = setInterval(
                    function(){carouselNext()},time)
            }
            
            carouselAutoPlay(5000);
            carousel.onmouseover = function(){clearInterval(carouselInterval)};
            carousel.onmouseout = function(){carouselAutoPlay()};

    Слайдер

    Запостил: mcheguevara2, 23 Мая 2015

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

    • > function(){carouselIndecarorChange(this) };
      > function(){carouselAutoPlay()};
      )}; ()};
      function(){(function(){carouselAutoPlay.bind(this)()}).bind(this).bind(this)();}
      Ответить
      • что это значит?
        Ответить
        • Переполнение буфера, насколько я понимаю.
          Ответить
        • Как мне показалось, автор кода, изучая JS, стал использовать следующий паттерн:
          obj.onevent = function() {
            // code
          }

          И даже если весь код состоял из вызова функции f, и можно было написать obj.onevent = f;, автор не искал лёгких путей и использовал более сложную конструкцию obj.onevent = function(){ f(); }. Аналогично и с первым аргументом setInterval.

          В своём комментарии я предложил посмеяться над этими весёлыми авторскими усложнениями и представил более сложный вариант, который сводится к простому carouselAutoPlay, как и авторская конструкция.

          В случае carouselIndecarorChange я так и не понял, это говнокод или нет. С одной стороны, вместо this для относительного удобства используется первый аргумент. С другой стороны - функция скорее всего используется только один раз, можно было оставить this и не усложнять.
          Ответить
          • Это собственное решение карусели без использования сторонних библиотек, мне просто интересно мнение других более опытных кодеров. Я начинающий разработчик, js мой первый язык.
            Как поправить что то может посоветуете?
            Ответить
            • Сейчас будут советы не начинать с js. ванга.жпг
              Ответить
            • Может это я немного ебанутый, но, если вы внимательно посмотрите вверх страницы вы увидите там название сайта. Гов-но-код. Не "помощь начинающим вебажабаебам", не "Стань фронт-енд спецом за неделю" (хотя некоторые обитатели не против буду насувать хуев в рот), а именно говнокод.
              Ты просишь меня посмотреть свой говноскрипт, но делаешь это без уважения и даже не называешь меня Дмитрий Иванович
              Ответить
              • Блин, вбрось, пожалуйста, ссылку на тред про фронтенд/бекенд. Я её потерял ;(
                Ответить
                • Ссылок не держу, для меня важнее суть и я ее усвоил)
                  Ответить
                  • Ну ОП'у ссылка всё же будет понятней, чем наш внезапный смех при виде бекенда или фронтенда.
                    Ответить
                    • Да люди не понимают, что прежде чем стать полноценным членом нашего уютненького надо луркать, вникать, вариться в этом говнокотле со всеми, а не вбегать с криками - вот мой говноскрипт, скажи что я хороший и ждать что тебя помоют, расчешут и поцелуют в попку.
                      Если опу интересно - пусть спросит. Это он у нас в гостях, а не мы у него
                      Ответить
                      • Да это на любом уютненьком так, даже в оффлайне.
                        Ответить
                        • И вообще, человек гоатсе и багры не постил, ничего нагло не требовал, а вежливо спросил. Думаю, нам нужно ценить вежливых людей, а то единственным нашим собеседником будет Семён с питоном и политотой.
                          Ответить
                          • Сегодня код - завтра лаба - послезавтра диплом. Вежливость города берет
                            Например у семы от вежливых людей батхерд
                            Ответить
                            • Послать кого угодно куда угодно всегда успеем. Только печально, что (а) так можно случайно выгнать хорошего человека, а (б) какой-нибудь хрен привыкнет и сваливать не станет.
                              Можно сказать вежливо пару раз, что это развлекательный сайт, мы никаких гарантий не даём, справок не выписываем, ничего не обещаем, сарказм во всех комментариях включён по умолчанию. А потом и посылать, если после этого человек ещё думает, что ему кто-то что-то должен.
                              Ответить
                              • Тебе волю дай ты и собеседования начнешь проводить)
                                Ответить
                                • Кстати да. Место, которое занимал Конардо, теперь свободно.
                                  На ГК срочно требуются вайперы, флудеры и тролли второй категории.
                                  Ответить
                                  • >> На ГК срочно требуются вайперы, флудеры и тролли второй категории.
                                    Не, мне разряд нельзя терять
                                    Ответить
                                  • Мож штатное расписание сократим ?
                                    Ответить
                                    • Давайте сократим. Тролли перестанут халявные бутерброды с икрой пожирать - может похудеют.
                                      Ответить
                                      • Огласите весь список сотрудников и должностей - будем голосовать за и против
                                        Ответить
                                        • Посмотрите здесь. Если PDFка не скачивается, можно пройти на форум в модераторскую и попросить К. Багрова дать доступ.
                                          Если что, пишите мне на почту, я с ними разберусь, они мне банку сгущёнки должны.
                                          Ответить
                            • Дык и у вас от вежливых людей в 41-м тоже батхерт был.
                              Ответить
                              • Даже не сравнивай пидарюга.
                                Ответить
                                • Ухахах, пидарану жопень как разорвало :D
                                  Ответить
                                  • Ну так прячь сгущенку, если тебе жопу рвет. В окопе пригодится.
                                    Ответить
                                    • Вася, ты по что сам с собой разговариваешь?
                                      Ответить
                                      • с ботом. Тоска уже и поговорить не с кем.
                                        Ответить
                                        • Да тем нет нормальных. Я бы тоже поболтал
                                          Ответить
                                          • А как же 3 извечные темы?
                                            Ответить
                                            • Блядство, разврат и наркотики?
                                              Ответить
                                              • эти тему тоже интересны. Но извечные темы. Бабы, футбол, машины.
                                                Начав говорить на одну из них обязательно набегут интересующиеся.
                                                Ответить
                                                • в машинах вообще не разбираюсь
                                                  Футбол не смотрел с ЧМ
                                                  Бабы - в данный момент времени отношения к ним не имею

                                                  Кароче я какой то ненастоящий мальчик
                                                  Ответить
                                                  • Может, проверим?..
                                                    http://www.evrika.ru/upload/publication/318392-178432-crime-doctor.jpg
                                                    Ответить
                                                  • >в машинах вообще не разбираюсь
                                                    так не бывает.
                                                    Футбол не смотрел с ЧМ

                                                    Я тоже его не смотрю только нервы портить.
                                                    Наших походу по кривизне ног в сборную берут.

                                                    Бабы - в данный момент времени отношения к ним не имею
                                                    Эх я тоже женат же.
                                                    Хотя тут на днях познакомился с одной. Пока как то не сложилось сказать, что я женат. Она мне так мило улыбается при встрече.
                                                    Ответить
                                                    • Улыбается, а сама небось представляет, как ты ее целуешь голую.

                                                      иВасилий, ах ты, сукин кот. Ты минусуешь?..
                                                      Ответить
                                                      • Я чет об этом не задумывался.
                                                        ЗЫ 2 kegdan я же говорил извечные темы.
                                                        Ответить
                                                    • >> так не бывает.

                                                      знаю что ауди - 4 кольца

                                                      >> Эх я тоже женат же.

                                                      Я то не женат
                                                      И как оно? стоит того?
                                                      Ответить
                                                      • >>И как оно? стоит того?
                                                        Семья - рассадник лжи и измен.
                                                        Ответить
                                                        • Я про гетеросексуальные отношения интересовался
                                                          Ответить
                                                          • Всё верно.
                                                            Что касается негетеросексуальных отношений, свадьба двух мужчин - жалкая попытка создать что-то вроде отношений, завсегда обреченная на провал, с учетом того, что геи строят отношения по схеме: понравился человек->познакомился с ним->попользовался->расстался.
                                                            Ответить
                                                            • >> понравился человек->познакомился с ним->попользовался->расстался.

                                                              история моей жизни, только вместо геев - бабы
                                                              Ответить
                                                      • >знаю что ауди - 4 кольца
                                                        вот
                                                        Ответить
                                    • >>Ну так прячь сгущенку, если тебе жопу рвет

                                      Мне кажется, или в этом предложении есть противоречие?
                                      Ответить
                      • Начинающий дедушка.
                        Ответить
                • А не, все таки держу
                  http://govnokod.ru/18185#comment286755
                  Ответить
                • Если брать комментарии, в которых есть одновременно эти два слова в точности, находится:
                  * http://govnokod.ru/3630#comment37392
                  * http://govnokod.ru/12243#comment163504
                  * http://govnokod.ru/14430#comment213844
                  * http://govnokod.ru/16434#comment241873
                  * http://govnokod.ru/18185#comment286760
                  * http://govnokod.ru/18203#comment286930
                  Ответить
              • Дмитрий Иванович, посоветуйте ресурс о котором вы намекате.
                Ответить
            • > Я начинающий разработчик, js мой первый язык.
              Здорово. Люблю JS, но упустил свой шанс изучать его как первый язык.
              Расскажите потом (через год-два) о том, что из этого вышло.

              carousel.onmouseover = function(){clearInterval(carouselInterval)};
              carousel.onmouseout = function(){carouselAutoPlay()};
              // можно заменить на эквивалентное:
              carousel.onmouseover = clearInterval.bind(this, carouselInterval); // но тут важно, что значение carouselInterval уже определено.
              // Если бы оно определялось после этой строки, такую замену нельзя было бы сделать
              carousel.onmouseout = carouselAutoPlay;

              В строках 15-24 можно вынести carouselItems[carouselActiveInt] в отдельную локальную переменную. Аналогично - в строках 30-44
              В строках 12-13 document.getElementsByClassName("carouse l-indicator") лучше тоже вынести в отдельную переменную и считать один раз перед циклом. Скорее всего движок это дело соптимизирует, но в общем случае оно должно тормозить. Впрочем, такая переменная уже даже была создана...
              Строки 16-17 повторяются 4 раза, можно их вынести в отдельную функцию, тогда пара функций упростится:
              var carouselIndecarorChange = function(id){
                toggleIndicators(carouselActiveInt);
                carouselActiveInt = id.getAttribute("data-slide-to");
                toggleIndicators(carouselActiveInt);
              };

              Для возможность добавления нескольких событий можно использовать не onсобытие = .., а addEventListener('событие', ...).
              Вероятно, полезно определять, имеется ли уже interval, и очищать его, если что. А остановку вынести в отдельную функцию:
              var carouselAutoPlay = function(time){
                if(carouselInterval) clearInterval(carouselInterval);
                carouselInterval = setInterval(carouselNext,time);
              };
              
              var carouselStop = function(){
                clearInterval(carouselInterval);
                carouselInterval = 0;
              };

              И ещё в строке 48 табы с пробелами смешались. Нехорошо.
              Ответить
              • >> Расскажите потом (через год-два) о том, что из этого вышло.

                Для тебя это просто эксперимент, а парню всю жизнь страдать

                >> Люблю JS, но упустил свой шанс изучать его как первый язык.

                С паскаля начинал?
                Ответить
                • > Для тебя это просто эксперимент, а парню всю жизнь страдать
                  В отличие от меня, у него ещё есть возможность завязать с этим делом.

                  > С паскаля начинал?
                  Да.
                  Ответить
                  • >> В отличие от меня, у него ещё есть возможность завязать с этим делом.

                    Да даже меня соблазнило это отродье тьмы, а у меня он не первый и даже не пятый язык. Что уж говорить о неокрепшей детской психике?
                    Ответить
            • >js мой первый язык
              Звучит как "мой первый язык - WCT", или "мой первый партнёр - Бен Ганн", или "мой первый тайтл - Boku no Pico"
              Ответить
              • Доктор, а если у меня js был шестым языком, а боку но пико третьим тайтлом, я буду жить?
                Ответить
      • Тройной слой изоленты)
        Ответить

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