Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jQuery табы и видео с youtube, как остановить видео при переключении? 
V
    Опции темы
Cheizer
  Дата 29.10.2014, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Дорогие друзья, нужна очень ваша помощь, ума не приложу как реализовать следующую задачу, есть JQUERY табы, список переключает табы, в которых видео с youtube, вставлено как iframe.

Если в одном табе запустить видео, и не останавливая его переключить на другой таб, то оно продолжает играть в закрытом табе, и это треш smile, как сделать так, что бы при переключении табов, все остальные видео ролики прекращали играть, кроме того, на таб которого переключились??? Всю голову изломал, в jquery только разбираюсь. Подскажите пожалуйста!!!! 



Код

<div id="tabs">
<ul>    
<li><a href="#tabs-1" class="haract_line">1 видео</a></li>    
<li><a href="#tabs-2" class="haract_line">2 видео</a></li>
<li><a href="#tabs-3" class="haract_line">3 видео</a></li>
</ul>

        <div id="tabs-1" class="animated fadeInRight">
    <iframe width="570" height="351" src="//www.youtube.com/embed/Lkb1kGCsIJ0" frameborder="0" allowfullscreen></iframe>
    </div>
    
    <div id="tabs-2" class="animated fadeInRight video1">
    <iframe width="570" height="351" src="//www.youtube.com/embed/Lkb1kGCsIJ0" frameborder="0" allowfullscreen></iframe>
    </div>
    
    <div id="tabs-3" class="animated fadeInRight video1">
    <iframe width="570" height="351" src="//www.youtube.com/embed/Lkb1kGCsIJ0" frameborder="0" allowfullscreen></iframe>
    </div>
</div>

PM MAIL   Вверх
sQu1rr
Дата 29.10.2014, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 2
Всего: 13



На stackoverflow всегда есть ответ
http://stackoverflow.com/questions/8667882...ding-the-iframe
Код

<script>
function toggleVideo(state) {
    // if state == 'hide', hide. Else: show video
    var div = document.getElementById("popupVid");
    var iframe = div.getElementsByTagName("iframe")[0].contentWindow;
    div.style.display = state == 'hide' ? 'none' : '';
    func = state == 'hide' ? 'pauseVideo' : 'playVideo';
    iframe.postMessage('{"event":"command","func":"' + func + '","args":""}', '*');
}
</script>

<p><a href="javascript:;" onClick="toggleVideo();">Click here</a> to see my presenting showreel, to give you an idea of my style - usually described as authoritative, affable and and engaging.</p>

<!-- popup and contents -->
<div id="popupVid" style="position:absolute;left:0px;top:87px;width:500px;background-color:#D05F27;height:auto;display:none;z-index:200;">
   <iframe width="500" height="315" src="http://www.youtube.com/embed/T39hYJAwR40?enablejsapi=1" frameborder="0" allowfullscreen></iframe>
   <br /><br />
   <a href="javascript:;" onClick="toggleVideo('hide');">close</a>

PM MAIL Skype GTalk   Вверх
Aliance
Дата 29.10.2014, 13:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Если лень лезть в Youtube API, то неужели было лень залезть в Гугл? 2 ссылка выдает ответ на ваш вопрос.
PM MAIL WWW ICQ Skype   Вверх
sQu1rr
Дата 29.10.2014, 13:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 2
Всего: 13



Ну разумеется это только пример, селектить правильные айфремы и биндить ивенты к табам придется самому. если что не получится - рад помочь smile
PM MAIL Skype GTalk   Вверх
Cheizer
Дата 29.10.2014, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Спасибо, но JS вообще сложно, я на JQUERY хочу сделать, да видел я много чего, но там не понятно для меня, и большинство решений на JS чистом, а это треш для меня,
Пытаюсь сделать как то так, хочу логику: по клику на табе, получаю id таба из атрибута href, так как этот же id и у div с iframe с видео, далее, 
очищаю все iframe кроме того на таб которого кликнул.  Но ничего не получается то что задумано smile) что не так?

Код

<script>
$(document).ready(function() {     
$('#tabs li a').click(function() {           
var vid= $(this).attr("href");
$('div:not(vid)').empty();         
}); 
});
</script>

PM MAIL   Вверх
Aliance
Дата 29.10.2014, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Cheizer, вы пишите глупости! jQuery -это лишь кроссбраузерная оболочка над некоторыми популярными практиками в JS. Не все вещи можно сделать только в синтактисе jQuery, т.к. если решение довольно уникальное - его нет и не может быть в jQuery. Суть решения в том, чтобы послать в iframe postMessage запрос. И все. Выше был приведен как полностью рабочий код (с демо странцией на jsfiddle), так и описание того как это работает (на английском). Если лдя вас это слишком сложно - либо разбирайтесь, спрашивая здесь что не понятно, либо наймите профессионала.

Кстати, на форуме запрещено ругательные выражения, я отредактировал ваш пост.
PM MAIL WWW ICQ Skype   Вверх
Cheizer
Дата 29.10.2014, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(Aliance @ 29.10.2014,  15:58)
Cheizer, вы пишите глупости! jQuery -это лишь кроссбраузерная оболочка над некоторыми популярными практиками в JS. Не все вещи можно сделать только в синтактисе jQuery, т.к. если решение довольно уникальное - его нет и не может быть в jQuery. Суть решения в том, чтобы послать в iframe postMessage запрос. И все. Выше был приведен как полностью рабочий код (с демо странцией на jsfiddle), так и описание того как это работает (на английском). Если лдя вас это слишком сложно - либо разбирайтесь, спрашивая здесь что не понятно, либо наймите профессионала.

Кстати, на форуме запрещено ругательные выражения, я отредактировал ваш пост.

Я прихожу сюда за конструктивной помощью, а не критикой, скажите, вы можете мне помочь??? Если нет, пожалуйста, не вмешивайтесь. 
Ссылками кидаться это не дело для форума, я пришел сюда за помощью и за объяснением, не критикуйте если не предлагаете ничего конкретного, погуглить я и сам могу, что и делаю всегда в первую очередь, но разобраться прихожу сюда и не первый раз! И всегда мне здесь помогают люди знающие. 

Это сообщение отредактировал(а) Cheizer - 29.10.2014, 16:56
PM MAIL   Вверх
sQu1rr
Дата 29.10.2014, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 2
Всего: 13



Цитата(Cheizer @  29.10.2014,  16:35 Найти цитируемый пост)
Это вы пишете глупости

Сэр, вы ошибаетесь


Цитата(Cheizer @  29.10.2014,  16:35 Найти цитируемый пост)
 если не можете помочь и пояснить, не лезьте!

Цитата(Aliance @  29.10.2014,  15:58 Найти цитируемый пост)
 Суть решения в том, чтобы послать в iframe postMessage запрос. И все. Выше был приведен как полностью рабочий код (с демо странцией на jsfiddle), так и описание того как это работает (на английском). Если лдя вас это слишком сложно - либо разбирайтесь, спрашивая здесь что не понятно, либо наймите профессионала.



Цитата(Cheizer @  29.10.2014,  16:35 Найти цитируемый пост)
Ссылками кидаться это не дело для форума,, я пришел сюда за помощью и за обьяснением, а не критикой, не критикуйте если не предлагаете конкретно, погуглить я и сам могу, но разобраться прихожу сюда и не первый раз!

Никто вас не критикует, вы напишите что не получается. Решать за вас, тоже не для этого форума. Тот код что вы привели, даже не собирается никак пытаться ничего делать с плеером. Вот вы попытайтесь а мы покритикуем поможем и объясним что непонятно

Это сообщение отредактировал(а) sQu1rr - 29.10.2014, 16:56
PM MAIL Skype GTalk   Вверх
Cheizer
Дата 29.10.2014, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Я же уже писал! Еще раз, ибо все умные тут, а я глупый глупости пишу, вот глупости еще раз!

Пытаюсь сделать так, логика: по клику на табе, получаю id таба из атрибута href, так как этот же id и у div с iframe с видео, далее, 
очищаю все iframe кроме того на таб которого кликнул.  Но ничего не получается то что задумано) что не так?

Код

<script>
$(document).ready(function() {     
$('#tabs li a').click(function() {           
var vid= $(this).attr("href");
$('div:not(vid)').empty();         
}); 
});
</script>

PM MAIL   Вверх
sQu1rr
Дата 29.10.2014, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 2
Всего: 13



Цитата(Cheizer @  29.10.2014,  16:59 Найти цитируемый пост)
Но ничего не получается то что задумано

Ну если задуманно именно это
Код

$('div:not('+vid+')').empty(); // изучайте конкатенацию строк с переменными

PM MAIL Skype GTalk   Вверх
Aliance
Дата 29.10.2014, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



У ссылок в атрибуте href содержится #tabs-N, значит в вашей переменной vid при клике на первую ссылку будет строка #tabs-1. Если бы вы сделали dump в консоль, например, вы могли бы в этом убедиться.
Далее, селектор 'div:not(vid)' - что вы хотите тут получить? Все дивы, кроме текущего активного? Логично. Только опять же таки, если бы вы сами дебажили свой же код - вы бы увидели, что в коллекции по такому селектору пустой массив - то есть элементов не найдено. Возможно, тогда бы вы догадались сами, что что-то не так. А именно - у вас vid это переменная js, а вы ее хотите подставить прямо в строку селектора (см. sizzle.js). Нужно хотя бы так было сделать:
Код

$('div:not(' + vid + ')')


Но и тут бы вас ждало разочарование. А все потому, что нужно зайти в мануал и прочесть, что же такое этот :not() и что туда можно запихать. Он принимает на вход селектор. А у вас есть строка с ID. Там же в документации сказано, что при переменных данных лучше использовать не псевдоселектор :not(), а метод .not(). Он может принимать как селектор, так и элемент сразу. Таким образом код можно было бы упростить до такого:
Код

$(function() {     
    $('#tabs li a').click(function() {
        $('div').not(this).empty();         
    }); 
});


Я конечно промолчу (ведь глупости-то пишу я, оказывается), что ваш код слишком абстрактный и проходится по всем дивам на страничке, правильней было бы ограничить траверсинг каким-то классом.

Только дальше встает вопрос резонный. Зачем вы хотите вызвать метод .empty()? Он же удалит iframe, конечно решив вашу проблему с воспроизведением неактивного видео, но повторно туда уже будет не вернуться. Правильное решение - посылка postMessage, о которой я говорил выше.

Надеюсь я вам максимально просто и полно ответил на ваш вопрос, и вы более не против моего присутствия в этом топике. Аминь  smile 
PM MAIL WWW ICQ Skype   Вверх
sQu1rr
Дата 29.10.2014, 17:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 2
Всего: 13



Согласен со всем что написано, но немного не понял смысла этой фразы
Цитата(Aliance @  29.10.2014,  17:16 Найти цитируемый пост)
Он принимает на вход селектор. А у вас есть строка с ID.

Это же тоже селектор, а значит все будет работать по задумке автора, вот только непонятно, что он собирается увидеть, когда нажмет на следующий таб

Добавлено через 5 минут и 25 секунд
Цитата(Aliance @  29.10.2014,  17:16 Найти цитируемый пост)
Таким образом код можно было бы упростить до такого:

В вашем коде this - это ссылка <a> а не div, поэтому мимо :(
PM MAIL Skype GTalk   Вверх
Cheizer
Дата 29.10.2014, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(Aliance @ 29.10.2014,  17:16)
У ссылок в атрибуте href содержится #tabs-N, значит в вашей переменной vid при клике на первую ссылку будет строка #tabs-1. Если бы вы сделали dump в консоль, например, вы могли бы в этом убедиться.
Далее, селектор 'div:not(vid)' - что вы хотите тут получить? Все дивы, кроме текущего активного? Логично. Только опять же таки, если бы вы сами дебажили свой же код - вы бы увидели, что в коллекции по такому селектору пустой массив - то есть элементов не найдено. Возможно, тогда бы вы догадались сами, что что-то не так. А именно - у вас vid это переменная js, а вы ее хотите подставить прямо в строку селектора (см. sizzle.js). Нужно хотя бы так было сделать:
Код

$('div:not(' + vid + ')')


Но и тут бы вас ждало разочарование. А все потому, что нужно зайти в мануал и прочесть, что же такое этот :not() и что туда можно запихать. Он принимает на вход селектор. А у вас есть строка с ID. Там же в документации сказано, что при переменных данных лучше использовать не псевдоселектор :not(), а метод .not(). Он может принимать как селектор, так и элемент сразу. Таким образом код можно было бы упростить до такого:
Код

$(function() {     
    $('#tabs li a').click(function() {
        $('div').not(this).empty();         
    }); 
});


Я конечно промолчу (ведь глупости-то пишу я, оказывается), что ваш код слишком абстрактный и проходится по всем дивам на страничке, правильней было бы ограничить траверсинг каким-то классом.

Только дальше встает вопрос резонный. Зачем вы хотите вызвать метод .empty()? Он же удалит iframe, конечно решив вашу проблему с воспроизведением неактивного видео, но повторно туда уже будет не вернуться. Правильное решение - посылка postMessage, о которой я говорил выше.

Надеюсь я вам максимально просто и полно ответил на ваш вопрос, и вы более не против моего присутствия в этом топике. Аминь  smile

Спасибо большое ребята, теперь начинаю понимать, и конкатенацию смотрел, всегда ищу примеры, и если в доках их нет, я все равно не понимаю, сложно еще тех доки понимать.

С конкатенацией понял, исправил.
Добавил атрибут data к ссылке что бы id забирать чистый, без #
И согласен с вами по поводу возврата на предыдущую вкладку, empty() рубит все. 


Код

<script>
$(document).ready(function() {     
$('#tabsvid li a').click(function() {           
var vid= $(this).attr("data"); 
$('div#'+vid+' div:not('+vid+')').empty();
}); 
});
</script>



Это сообщение отредактировал(а) Cheizer - 29.10.2014, 18:41
PM MAIL   Вверх
sQu1rr
Дата 29.10.2014, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 2
Всего: 13



Что это?
Код

$('div#'+vid+' div:not('+vid+')').empty();

Если vid = tabs-1, то это будет выглядить
Код

$('div#tabs-1 div:not(tabs-1)').empty();

Что значит будет искать все <div> которые не <tabs-1> (серьезно) внутри <div id="tabs-1">

Вы уж используйте то что посоветовал мр. Aliance
Код

$('#tabs div').not('#' + vid).empty();

Или что-то подобное, вообще желательно всем <div> с которыми будете работать дать класс, а то, по добавлению (не относящихся к делу) <div> вы их селектить и чистить будуте тоже.

Это сообщение отредактировал(а) sQu1rr - 29.10.2014, 19:03
PM MAIL Skype GTalk   Вверх
Cheizer
Дата 30.10.2014, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Цитата(sQu1rr @ 29.10.2014,  19:02)
Что это?
Код

$('div#'+vid+' div:not('+vid+')').empty();

Если vid = tabs-1, то это будет выглядить
Код

$('div#tabs-1 div:not(tabs-1)').empty();

Что значит будет искать все <div> которые не <tabs-1> (серьезно) внутри <div id="tabs-1">

Вы уж используйте то что посоветовал мр. Aliance
Код

$('#tabs div').not('#' + vid).empty();

Или что-то подобное, вообще желательно всем <div> с которыми будете работать дать класс, а то, по добавлению (не относящихся к делу) <div> вы их селектить и чистить будуте тоже.

Спасибо, решил сделать так, в самих iframe атрибут SRC оставил пустыми, а сами ссылки на видео перенес в созданный новый атрибут URLVIDEO у самого тега A, и по клику забираю видео и заполняю соответствующий ID атрибут SRC у IFRAME, но млять почему не заполняется атрибут SRC у IFRAME не пойму :( что не так на этот раз?  

Код

<script>
$(document).ready(function() {     
$('#tabsvid li a').click(function() {  
    
var vid= $(this).attr("href");    
var video = $(this).attr("urlvideo");
$('div'+vid+ 'iframe').attr('src','video');
}); 
});
</script>

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.