Здравствуйте! Прошу помощи в одной задаче,нужно сделать так,чтобы при клике на ссылку в меню навигации по сайту,проигрывался звук (типа щелчка,дзынь,клац и т.д.) ,для этого я подключил плагин ionsound.js. Но,при клике,он не успевает проиграть и осуществляется переход на вызванную страницу. Так же,чтобы это происходило без задержки в секунду-две(setTimeout не подходит(требование проверяющего задачу)). Спасибо! Вот отрывок кода: Код (PHP): <div id="menu"> [url="index1.html"]Главная[/url] </div> <script src="node/jquery.js"></script> <script src="node/ion.sound.js"></script> <script> $(document).ready(function(){ $.ionSound({ sounds:[ {name: "bell_ring"} ], preload: true, path: "node/sounds/", multiplay: true, volume: 1.0 }); }); </script> <script type="text/javascript"> $(".lines").on("click", function(){ $.ionSound.play ("bell_ring"); }); </script>
Re: HTML, Проигрывание звука при клике по ссылке с ionSond.j Взаимно исключающие требования. Добавлено спустя 2 минуты 22 секунды: Re: HTML, Проигрывание звука при клике по ссылке с ionSond.js Делай переход в функции ended_callback
Re: HTML, Проигрывание звука при клике по ссылке с ionSond.j Переход по ссылке оформить в функцию, обернуть ее и саундплей в еще одну функцию и подменить ей оригинальный саундплей. Чтобы одна за другой шли строго. Чтобы ничего не сломалось, новая функция-подмена должна проксировать наружу возвращаемые данные от оригинального саундплея. Велкам ту JS У меня так в 2д-движке JS-овом отладочный код "паразитивно" врубается в действующий по команде, собирая статистику, перехватывая ввод и вывод, но ничего не ломая. Офигенная вещь в плане удобства.
Это как вложенные события ? Можете пример написать,пожалуйста..? Добавлено спустя 9 минут 14 секунд: Re: HTML, Проигрывание звука при клике по ссылке с ionSond.js Так ? Код (PHP): <script> $(document).ready(function(){ $.ionSound({ sounds:[ {name: "bell_ring"} ], preload: true, path: "node/sounds/", multiplay: true, ended_callback: null, volume: 1.0 }); }); </script> Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
Что-то вроде. На пальцах так: 1) в JS на ходу можно как угодно менять что угодно. Reflection тут повсюду. Никто не помешает в реальном времени отцеплять/прицеплять функции, переопределять любые свойства объектов, добавлять новые и тд. В этом суть JS. 2) Любая функция - это инкапсулированный код. Для внешнего мира у любой функции есть только сигнатура и возврат. 3) У нас есть главная функция и есть функция-паразит. 4) Создаем третью функцию, имеющую сигнатуру как у главной. 5) В ее тело подцепляем оригинальную главную функцию, а после нее паразитную, замыкаем это дело, чтоб не развалилось. 6) Возврат оригинальной главной функции перехватываем и потом отдаем как возврат нашей новой функции. 7) Присваиваем оригинальной функции тело новой функции. Все, подмена сделана. Что имеем в итоге: для внешнего мира не изменилось воооообще ничего. Функция принимает те же параметры и возвращает корректные данные. Но ее функциональность изменилась. Сейчас занят, к сожалению. Вечером, если не забуду, поищу в коде у себя живой коннектор. Добавлено спустя 8 минут 56 секунд: Re: HTML, Проигрывание звука при клике по ссылке с ionSond.js А может и не вечером. Что-то нашел и на работе: Код (PHP): mergeFunctions = function () { var arg = arguments; var result = function () { var caller = this; for (var i = 0; i < arg.length; i++) { arg[i].apply(caller, arguments); } }; result.clear = function (number) { number = number || 0; return arg[number]; }; return result; }; Работает как: Код (PHP): foo = mergeFunctions(foo, bar); // подменить foo на связку foo и bar foo = foo.clear(); // восстановить оригинальную foo Только ретурны не проксируются. Но это сам допишешь, если будет нужно.
Вот как ещё один пример https://api.jquery.com/event.preventdefault/ Удали всё внутри анонимной функции, но оставь event.preventDefault(); после него запускай звук через ionSound, в ended_callback добавь анонимную функцию которая сделает переход по ссылке. Ужасный говнокод Код (PHP): <!DOCTYPE html> <html> <head> <title></title> <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.1.js"></script> </head> <body> [url="http://jquery.com"]default click action is prevented[/url] <script> $(function() { $( "a" ).click(function( event ) { event.preventDefault(); document.myhref = this.href; $.ionSound({ sounds: [{name: "bell_ring"}], preload: true, path: "node/sounds/", multiplay: true, ended_callback: mylocation, volume: 1.0 }); }); }); function mylocation() { window.location = document.myhref; } </script> </body> </html>
Re: HTML, Проигрывание звука при клике по ссылке с ionSond.j Я догадывался, что что-то такое там есть, но не искал особо. Через коллбек даже лучше, имхо.