| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > jQuery табы и видео с youtube |
| Автор: Cheizer 29.10.2014, 13:18 | ||
| Дорогие друзья, нужна очень ваша помощь, ума не приложу как реализовать следующую задачу, есть JQUERY табы, список переключает табы, в которых видео с youtube, вставлено как iframe. Если в одном табе запустить видео, и не останавливая его переключить на другой таб, то оно продолжает играть в закрытом табе, и это треш
|
| Автор: sQu1rr 29.10.2014, 13:28 | ||
| На stackoverflow всегда есть ответ http://stackoverflow.com/questions/8667882/how-to-pause-a-youtube-player-when-hiding-the-iframe
|
| Автор: Aliance 29.10.2014, 13:29 |
| Если лень лезть в Youtube API, то неужели было лень залезть в Гугл? http://lmgtfy.com/?q=stop+youtube+video+iframe+jquery на ваш вопрос. |
| Автор: sQu1rr 29.10.2014, 13:30 |
| Ну разумеется это только пример, селектить правильные айфремы и биндить ивенты к табам придется самому. если что не получится - рад помочь |
| Автор: Cheizer 29.10.2014, 14:28 | ||
| Спасибо, но JS вообще сложно, я на JQUERY хочу сделать, да видел я много чего, но там не понятно для меня, и большинство решений на JS чистом, а это треш для меня, Пытаюсь сделать как то так, хочу логику: по клику на табе, получаю id таба из атрибута href, так как этот же id и у div с iframe с видео, далее, очищаю все iframe кроме того на таб которого кликнул. Но ничего не получается то что задумано
|
| Автор: Aliance 29.10.2014, 15:58 |
| Cheizer, вы пишите глупости! jQuery -это лишь кроссбраузерная оболочка над некоторыми популярными практиками в JS. Не все вещи можно сделать только в синтактисе jQuery, т.к. если решение довольно уникальное - его нет и не может быть в jQuery. Суть решения в том, чтобы послать в iframe postMessage запрос. И все. Выше был приведен как полностью рабочий код (с демо странцией на jsfiddle), так и описание того как это работает (на английском). Если лдя вас это слишком сложно - либо разбирайтесь, спрашивая здесь что не понятно, либо наймите профессионала. Кстати, на форуме запрещено ругательные выражения, я отредактировал ваш пост. |
| Автор: Cheizer 29.10.2014, 16:35 | ||
Я прихожу сюда за конструктивной помощью, а не критикой, скажите, вы можете мне помочь??? Если нет, пожалуйста, не вмешивайтесь. Ссылками кидаться это не дело для форума, я пришел сюда за помощью и за объяснением, не критикуйте если не предлагаете ничего конкретного, погуглить я и сам могу, что и делаю всегда в первую очередь, но разобраться прихожу сюда и не первый раз! И всегда мне здесь помогают люди знающие. |
| Автор: Cheizer 29.10.2014, 16:59 | ||
| Я же уже писал! Еще раз, ибо все умные тут, а я глупый глупости пишу, вот глупости еще раз! Пытаюсь сделать так, логика: по клику на табе, получаю id таба из атрибута href, так как этот же id и у div с iframe с видео, далее, очищаю все iframe кроме того на таб которого кликнул. Но ничего не получается то что задумано) что не так?
|
| Автор: sQu1rr 29.10.2014, 17:09 | ||
Ну если задуманно именно это
|
| Автор: Aliance 29.10.2014, 17:16 | ||||
| У ссылок в атрибуте href содержится #tabs-N, значит в вашей переменной vid при клике на первую ссылку будет строка #tabs-1. Если бы вы сделали dump в консоль, например, вы могли бы в этом убедиться. Далее, селектор 'div:not(vid)' - что вы хотите тут получить? Все дивы, кроме текущего активного? Логично. Только опять же таки, если бы вы сами дебажили свой же код - вы бы увидели, что в коллекции по такому селектору пустой массив - то есть элементов не найдено. Возможно, тогда бы вы догадались сами, что что-то не так. А именно - у вас vid это переменная js, а вы ее хотите подставить прямо в строку селектора (см. sizzle.js). Нужно хотя бы так было сделать:
Но и тут бы вас ждало разочарование. А все потому, что нужно зайти в http://api.jquery.com/not-selector/ и прочесть, что же такое этот :not() и что туда можно запихать. Он принимает на вход селектор. А у вас есть строка с ID. Там же в документации сказано, что при переменных данных лучше использовать не псевдоселектор :not(), а метод http://api.jquery.com/not/. Он может принимать как селектор, так и элемент сразу. Таким образом код можно было бы упростить до такого:
Я конечно промолчу (ведь глупости-то пишу я, оказывается), что ваш код слишком абстрактный и проходится по всем дивам на страничке, правильней было бы ограничить траверсинг каким-то классом. Только дальше встает вопрос резонный. Зачем вы хотите вызвать метод .empty()? Он же удалит iframe, конечно решив вашу проблему с воспроизведением неактивного видео, но повторно туда уже будет не вернуться. Правильное решение - посылка postMessage, о которой я говорил выше. Надеюсь я вам максимально просто и полно ответил на ваш вопрос, и вы более не против моего присутствия в этом топике. Аминь |
| Автор: sQu1rr 29.10.2014, 17:21 |
| Согласен со всем что написано, но немного не понял смысла этой фразы Это же тоже селектор, а значит все будет работать по задумке автора, вот только непонятно, что он собирается увидеть, когда нажмет на следующий таб Добавлено через 5 минут и 25 секунд В вашем коде this - это ссылка <a> а не div, поэтому мимо :( |
| Автор: Cheizer 29.10.2014, 18:38 | ||||||||
Спасибо большое ребята, теперь начинаю понимать, и конкатенацию смотрел, всегда ищу примеры, и если в доках их нет, я все равно не понимаю, сложно еще тех доки понимать. С конкатенацией понял, исправил. Добавил атрибут data к ссылке что бы id забирать чистый, без # И согласен с вами по поводу возврата на предыдущую вкладку, empty() рубит все.
|
| Автор: sQu1rr 29.10.2014, 19:02 | ||||||
Что это?
Если vid = tabs-1, то это будет выглядить
Что значит будет искать все <div> которые не <tabs-1> (серьезно) внутри <div id="tabs-1"> Вы уж используйте то что посоветовал мр. Aliance
Или что-то подобное, вообще желательно всем <div> с которыми будете работать дать класс, а то, по добавлению (не относящихся к делу) <div> вы их селектить и чистить будуте тоже. |
| Автор: Cheizer 30.10.2014, 01:09 | ||||||||||
Спасибо, решил сделать так, в самих iframe атрибут SRC оставил пустыми, а сами ссылки на видео перенес в созданный новый атрибут URLVIDEO у самого тега A, и по клику забираю видео и заполняю соответствующий ID атрибут SRC у IFRAME, но млять почему не заполняется атрибут SRC у IFRAME не пойму :( что не так на этот раз?
|
| Автор: Aliance 30.10.2014, 09:45 | ||||||||||||||
согласен, спасибо за поправку действительно, не внимателен. Cheizer, на форуме есть кнопка код с выпадающим списком. для данного раздела чаще всего используется либо html (по дефолту), либо javascript. Если вы пишите код внутри тегов script - фактически это кусок html кода, а вы его оборачиваете в код js. Самое правильнео в данном случае - писать js без тегов script (имеется ввиду на данном форуме), подразумевая его наличие в реальном проекте. Тогда подсветка синтаксиса будет работать корректно. Кроме того всегда не понимал, зачем люди пишут
когда можно писать сокращенную форму
Вы так же проигнорировали мое замечание на счет выборки всех дивов
И я бы не рекомендовал вам при любой необходимости вешать произвольные атрибуты, работать-то работает, но это не по стандарту. Если очень хочется - то лучше тогда использовать data-* нотацию и получать к ним доступ не через .attr(), а через .data():
Но в вашем случае это будет лишним повторением, у вас же есть уже ID. Просто, можно всегда обрезать первый символ:
|
| Автор: Aliance 30.10.2014, 10:11 | ||
| Вот примерная реализация того, как это должно работать: http://jsfiddle.net/Aliance/y1x9u0oj/ Оказалось, для правильной работы отсановки видео из js нужно вставлять видео с доп. параметрами allowscriptaccess="always" (атрибут) и enablejsapi=1 (get-параметр):
|
| Автор: sQu1rr 30.10.2014, 12:25 | ||||||
Немного в оффтопик пойду, но раз тут обсуждается конструкция
сразу дам совет: не вставляем скрипты в <head> вставляем скрипты в конец <body> таким образом скрипты грузятся после загрузки html, и могут выполнятся сразу. Что бы не засорять глобальное пространство можно оборачивать в кошерный
главное следить что бы сначало зависимости грузились а потом уже ваши скрипты
|
| Автор: Cheizer 30.10.2014, 23:41 | ||
| Короче сделал так, может глупо но меня устраивает, а суть такая по клику на табе по тегу а, забираю ID блока с видео и вынес в новый параметр URLVIDEO в котором теперь храню ссылку на ютуб, далее очищаю все остальные IFRAME что бы лишнего не звучало, и подставляю URLVIDEO именно в активный блок IFRAME ссылку с ютуб, все просто, спасибо что попытались помочь.
|