Не хочу ничего рекламить, но наверно из-за jquery у лофтскула, сайт грузится пол дня, пока не загрузится нельзя раскрыть аккордеон, https://loftschool.com/course/php --- Добавлено --- Это табы, сможешь разобраться? Код (Javascript): var tab = document.querySelectorAll(".tab"), content = document.querySelector(".content"), post = document.querySelectorAll(".post"); tab[0].style.backgroundColor='red'; for (var i = 0; i < content.children.length; i++) { content.children[i].style.display='none'; content.children[0].style.display='block'; } for (var i = 0; i < tab.length; i++) { (function(index) { tab[i].addEventListener('click', function () { var isActive = (tab[index].getAttribute('style') == 'background-color: red;') ? true : false, isHidden = (post[index].getAttribute('style') == 'display: none;') ? true : false; if (!isActive) { [].forEach.call(tab, function(el) { el.removeAttribute('style'); }); tab[index].style.backgroundColor='red'; } if (isHidden) { [].forEach.call(content.children, function(el) { el.style.display='none'; }); post[index].style.display='block'; } }); })(i); } HTML: <div class="tab-menu"> <span class="tab">Tab 1</span> <span class="tab">Tab 2</span> <div class="content"> <div class="post"> <p> dfsd sns ksnkn snskn sf a f sfs sfs dfsd sns ksnkn snskn sf a f sfs ss dfsd sns ksnkn snskn sf a f sfs sfs dfsd sns ksnkn snskn sf a f sfs sfs </p> </div> <div class="post"> <p> Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 Tab 2 </p> </div> </div> </div> Код (CSS): .tab-menu{ width: 300px; outline: 1px solid; } span{ width: 49%; display: inline-block; vertical-align: top; background: green; } span:hover{ cursor: pointer; } .content{position: relative} .post{ position: absolute; top: 0; left: 0; } .post2{ display: none; }
Это табы курильщика. Так много кода для табов не нужно. Достаточно одного списка, правильного CSS на флексбоксе, это важно, и прикрутить toggle классу "selected" на клик по заголовку таба. Вот и все.
@Fell-x27 Сижу пью я чаёк читаю форум. Пишу свой кодик. И начитавшись ваших бравых речей. Воспрянул я духом и полез в js убрав нахрен jquery. С течением времени прихожу я к следубщиму куску банального кода обработка собтия клика на js по селектору. Не по id а если ткнут на класс. Окей Ломал голову пока не допёрло, а точне пока строки доки не вошил мне в мозг что там не просто волк в овечьей шкуре а массив из объектов дом элемента, а значит напрямую не обращусь с евентом. Знач надо перебор ага вот пишу. Окей вот оно творение: Код (Javascript): var block = document.querySelectorAll("a.block-btn"); for (var i = 0; i < block.length; i++) { block[i].onclick = function(event) { console.log('hi choo'); } } Зис гуд но что вы скажите на это Код (Javascript): $('.block-btn').on("click", function (){ console.log('hi choo'); }); Вамм не кажется что код малясмь короче получился? --- Добавлено --- И про шкуру внутри, не надо что он там большой и т.д вес jquery бьёт любая картинка. И думаю под капотом у jquery некая подобная функция и имеется при обработке данного события. --- Добавлено --- Добавлю буду рад услышать что я не парв. И на js можн овзять и сделать короче и элегантней.
Код (Javascript): [].forEach.call(document.querySelectorAll('.block-btn'), function (el) { el.addEventListener('click', function() { console.log('hi choo'); }, false); }); --- Добавлено --- Хотя и в переборе циклом обычным не вижу ничего криминального. Тут не в синтаксисе дело, заметь, просинтаксис я ничего не говорил, что он у JQ хуже или неудобнее. --- Добавлено --- Большой. Ради синтаксического сахара тащить это - не имеет смысла. Сравнение с картинкой это вин, конечно. Только картинка не накачана исполняющимся туго связанным кодом, который на каждый чих ворочает черти знает какие жернова. И картинки отключабельны даже на телефонах. А JS - это логика твоего приложения. На умеренно толстом клиенте она сама по себе не мелкая. А всякие SPA-парадигмы вообще проповедуют, что клиент может быть чуть ли не автономным, в разумных пределах. Излишне усложнять ее, таща в проект лишние зависимости и связи, таща туда навязываемую сверху спагетти-архитектуру только ради синтаксического сахара? Ты верно шутишь. А если логика твоего приложения завязана на JQuery, то у тебя там будет веселый букет JQuery-object'ов. Пока ты вешаешь обработчики кликов, ты об этом и не думаешь. А когда начнешь что-то писать, поймешь, о чем я.
@Fell-x27 не уверен что пока смогу полностью от jquery отказаться в связи с тем что используемые шаблоны html всё равно его тянут. Так что... Но то что привели в пример кода по кликам, надо бы изучить.... --- Добавлено --- хотя это тот же цикл который прозванивает каждый найденный элемент в доме с таким именем класса а точней с таким селектором.
если навязываемая сверху спагетти архитектура нужна чтобы склепать за час одностроничный ленд почему нет ? --- Добавлено --- Согласен на крупных проектах. Если это некая crm система или же крупный интернет магазин с ожидаемой большой обраткой данных. Я бы вообще предпочёл там заюзать аля ангуляр вуе или реакт какой нибудь. --- Добавлено --- и кстати с ними jquery вообще ели как соединяется. Можно но очень криво и не очень красиво.
Давай мух от супа отдельно. Я про разработку. То, о чем говоришь ты, вообще может решаться на уровне сниппетов, без напряжений лобных долей как таковых. Реакт нельзя ставить как альтернативу ангулярам и вуям. Разные вещи. Реакт про представление. Больше ничего не умеет. Ангуляр - зло лютое, к слову. По возможности, обходи стороной.
Это снова я, как я раньше говорил, это табы курильщика. Без обид. У меня дошли-таки руки выдернуть свои табы здорового человека(более или менее) из проекта в standalone-виде на jsFiddle. Держи - https://jsfiddle.net/yjvof4gb/ , может пригодится где, только там CSS всякое лишнее может содержать, лень было лопатить. Весь JS, которого там кот наплакал, по сути только вешает обработчик клика на вкладки, который включает класс active для кликнутого таба и выключает его для всех остальных. А это твои табы, для тех, кому ленно самим поднимать, а поглядеть хочется - https://jsfiddle.net/p6ydsw44/
C VueJS что угодно легко соединяется. Они же это как преимущество пишут. Хочешь - пиши полностью на нём приложение, хочешь - используй периодически. Как я недавно попробовал, написать на нём только корзину, в целом прикольно получилось. Это было в качестве эксперимента, хоть и на рабочем сайтике, поэтому в остальном там обычный JavaScript с jQuery. В следующий раз хочу больше на VueJS реализовать, в принципе, она мне понравилась. Ангуляр вызывает отторжение пока, к тому же я что-то не особо мечтаю учить всякие кофе и тайпскрипты.
Если научиться ПРОГРАММИРОВАТЬ, а не клепать, тогда не то что движок или фреймворк, любой язык программирования можно без проблем освоить.
Даааа ?) А пробовал соберать через webpack приложение на vue ? ) Ну вот попробуй и расскажи как там прикрепил jquery ) Я то с этой байдой бился около 2 дней и победил прикрепил в обход компилятора) Вот возьми попробуй, поставь ноду затем vue приложение разверни при установке поставь екслинт это такой помошник в дебаге ошибок на js. --- Добавлено --- На сколько я понял ты прикрепил к своему проекту просто кусочек библы) --- Добавлено --- Которую они пиарят. А там есть целая среда разработки на vue со своим синтаксисом на js и своим компилятором. всё это потом в js
У тебя, скажем так, и опыт, по сравнению с @mkramer насчитывает, грубо, те самые два дня... То, что тебе что-то трудно дается, не показатель трудности задачи. Быть может просто стоило документацию поштудировать поглубже?
@Fell-x27 да в доки нету чтобы было написано как прикрепить jquery там есть где то в примерах как крутить сторонние библы через веб пак! Но это все геморой потому что нормальной доки нету. Есть расплывчатые примеры разных людей. А на официальном форуме мне ни кто не ответил по моему вопросу. Пришлось в обходнйо путь компилятора писать подключение jquery и плюс внутри все скрипты на js писать в дом реди ибо иначе вылитали ошибки --- Добавлено --- точнее как на оф. сообществе мне ответили что jquery это зло. Не надо его юзать. Используйте vue --- Добавлено --- Я сделал всё по инструкции прикрутил библу jquery в компилятор. Но он не работал а выдовал ошибки то скрипт не доступен то в самом jquery Ошибки. И т.д и т.п Вообщем через два дня в тугих потугах я спросил чувака одного КАК? Он мат ьего прикрутил jquery. Он отвечает в обход компилятора. XD Я сижу и грызу себе ногу как сделать это правильно а он говорит а чё мучится подключи вне компилируемых объектов в html в самый низ. --- Добавлено --- И сложить надо файлы jquery в статик папку куда скомпиленные файлы попадают --- Добавлено --- @Fell-x27 я просто к тому что он грит: Вот я к этому и пишу. Всё срань у vue и jquery один долбанный синтаксис ($) --- Добавлено --- Собственно vue да офигенная штука она вообще просто сметает понимание старых стандартов. https://vue-loader.vuejs.org/ru/start/setup.html Здесь можно посмотреть как поставить vue loader. --- Добавлено --- Попробуйте чёткая вещь. Мне понравилось правда пока слишком сложно для реального и дешовенького проекта. Но в качестве образования. ДУмаю оно того стоит тем более на самом деле это очень даже занимательно.
Ну вот поскольку меня кормят простые проекты, я как-то от этого отстал, но решил сейчас нагнать. А то я даже и JS-ки пишу по старым стандартам. Ангулярку глянул - мозги косичками заплелись, vue глянул - всё понятно, особо разбираться не нужно. Теперь вот этот web-пак гляну. Сейчас наклёвывается проект средней сложности, может в нём уместно будет это делать. С корзиной у меня удобно получилось - переписал массивчик, товары в корзине поменялись сами, да ещё и дублирования нету от того, что одна корзина всплывающая, другая - страничкой. Но там-то у меня vue просто через cdn подключался, смысла всю эту байду с вебпаками ради одного модуля тащить не было. Бум догонять жизнь. Я ещё отстал от этого немного, поскольку вообще JavaScript не очень люблю, скорее мирюсь, как с необходимым злом. Но посмотрим, может и проникнусь Но по поводу jQuery - пока никакого конфликта не заметил. Может ещё столкнусь
А может все же в доку заглянуть? Ангулярка - это гребаный неповоротливый трындец с непродуманной, деревянной, убогой архитектурой. Наполовину из граблей, наполовину из костылей. И навязывающий проекту такой же стиль. Лесом, лееесом. Вот серьезно.
@Fell-x27 в том то и дело чтио jquery придётся вызывать самым последний и тогда конфликта не будет. А что делать если у тебя уже проект на штопанный кем то на jquery. А переписывать фронт ну некогда
Заменяешь все $. в проекте на другой алиас, объявляешь этот алиас через noConflict(). Все, у тебя есть неконфликтный код. Прикручивай к чему хочешь.
@Fell-x27 ладно ты не победим. Я не подумал смотреть не конфликт в самом jquery я искал решение в vue. --- Добавлено --- и всё равно это всё геморой.
Это вот как раз прицепом к посту об опыте. --- Добавлено --- Геморрой - это костыли, которые ты наворачивал. А то, о чем я говорю - задачка, решаемая в полуавтоматическом режиме за часик, на расслабоне. А то и меньше.
@Fell-x27 нет как раз это и есть кастыль. И то кастыль. Это кастыль придуманны jquery. По сути сам vue безконфликтно работает с jquery. Но вот компиляция через веб пак vue loader ом чё то даёт сбой! То есть внутрикомпилятора jquery подключаешь он их не считывает вообще. Чтобы подключить стороннию библу. Нужно добавить её не посредственно в настройки webpack но там какие то траблы я добавляю а он требует ещё что то добавить и установить устанавливешь и он до бесконечности постоянно просит что то устанавливать хз у меян не поулчилось как в доке веб пака указано сделать. В обще я плюнул. И сделал в обход грубюо говоря тоже самое что там и предложенно с ноу конфликтом.
Ну я бы в таком случае отдельным script подключил jquery, отдельным script - скомпилированный скрипт webPack
@mkramer я так и сделал. Только там есть одна хитрость скрипты jquery должны хранится в папке static. Иначе не скомпилится проект.
https://webpack.github.io/docs/shimming-modules.html#plugin-provideplugin вот для кого всё это писали?