Я пытаюсь реализовать вид игрока на своем веб-сайте. Если нажата кнопка 'Play'
, начинается музыка, и страница плавно прокручивается вниз. Но когда вы нажимаете 'Mute'
button (function(){music.volume=0})
Я не уверен, почему страница снова появляется наверху. window.scroll()
ничего не делает без задержки. Поэтому я использую функцию setTimeout
для прокрутки страницы в текущем месте. Проблема в том, что в Opera и IE setTimeout
занимает около 10 ms
, поэтому, когда я нажимаю кнопку 'Mute'
, я вижу, как тики вверх и назад. В хроме требуется только 2 ms
, и проблем нет. Теперь, когда я решил создать свою собственную функцию тайм-аута, window.scroll()
не работает снова.Только функция setTimeout выполняет функцию. JS
Вот мой код:
var isMuted = false;
muteButton.onclick = function() { ////This function works with big delay.
if (!isMuted) {
mainAudio.volume = 0;
isMuted = true;
} else {
mainAudio.volume = bgAudioTrackVolume;
isMuted = false;
}
setTimeout(function() {
window.scroll(0, offset); /// Works
}, 0)
};
Изменение SetTimeout с:
i = 9542155.873; /// I have tried delay time from 1ms - 250ms by changing this value.
while (i > 0.00001) {
i = i/1.00;
if (i < 0.00001) {
window.scroll(0, offset); /// Does not do anything. Strange! Have tried to change variable with a number.
}
}
Каждый раз, когда я проверить значение смещения, он всегда доступен перед вызовом функции прокрутки. Я знаю, что моя проблема не обычна, и я действительно нуждаюсь в вашей помощи.
Это потому, что ваш цикл while блокируется, а setTimeout не блокируется, поэтому что-то в вашем скрипте что-то меняет, а использование setTimeout задерживает выполнение до тех пор, пока эти изменения не будут выполнены, поскольку сценарий продолжает выполнение и просто приостанавливает тайм-аут функция для более позднего, в то время как цикл просто блокирует браузер, и нормальная цепочка выполнения все еще находится в игре. – adeneo
Какова ценность 'offset' и как она рассчитывается? – jfriend00
Позвольте мне угадать, кнопка отключения звука выглядит как '' и вы не отменяете событие? –