Javascript 触发滚动播放功能一次
我想在滚动到定义的id计数器时播放声音。它很好用,但我想玩一次。当有人再次向上或向下滚动时,音乐就成了一种循环。如何阻止这种情况Javascript 触发滚动播放功能一次,javascript,jquery,audio,scroll,mp3,Javascript,Jquery,Audio,Scroll,Mp3,我想在滚动到定义的id计数器时播放声音。它很好用,但我想玩一次。当有人再次向上或向下滚动时,音乐就成了一种循环。如何阻止这种情况 //点击#计数器时,在滚动条上播放倒计时声 $(窗口)。滚动(函数(){ var elemTop=$(“#计数器”).offset().top, elemHight=$(“#计数器”).outerHeight(), windowHeight=$(window).height(), windowScroll=$(this.scrollTop(); var countdo
//点击#计数器时,在滚动条上播放倒计时声
$(窗口)。滚动(函数(){
var elemTop=$(“#计数器”).offset().top,
elemHight=$(“#计数器”).outerHeight(),
windowHeight=$(window).height(),
windowScroll=$(this.scrollTop();
var countdownSound=新音频('./music/countdown.mp3');
如果(windowScroll>(elemTop+elemHeight-窗高)){
倒数播放;
}
});
也许您可以设置一个外部变量来检查:
var played = false;
$(window).scroll(function() {
var elemTop = $('#counter').offset().top,
elemHeight = $('#counter').outerHeight(),
windowHeight = $(window).height(),
windowScroll = $(this).scrollTop();
var countdownSound = new Audio('./music/countdown.mp3');
if( windowScroll > (elemTop + elemHeight - windowHeight) && played == false) {
countdownSound.play();
played = true;
}
});
或者,您可以构建一个play函数,并通过lodash.once()或类似的方式调用它
也就是说,通常在Croll上调用函数时,对它们进行限制是很有用的:
$(window).scroll(_.throttle(do_things_onscroll, 25));
function do_things_onscroll(){
//[do things]
}
请注意,我仍在利用Lodash实用程序,但您可以使用其他一些库,如下划线,或者只查找限制的代码。也许您可以设置一个外部变量来检查:
var played = false;
$(window).scroll(function() {
var elemTop = $('#counter').offset().top,
elemHeight = $('#counter').outerHeight(),
windowHeight = $(window).height(),
windowScroll = $(this).scrollTop();
var countdownSound = new Audio('./music/countdown.mp3');
if( windowScroll > (elemTop + elemHeight - windowHeight) && played == false) {
countdownSound.play();
played = true;
}
});
或者,您可以构建一个play函数,并通过lodash.once()或类似的方式调用它
也就是说,通常在Croll上调用函数时,对它们进行限制是很有用的:
$(window).scroll(_.throttle(do_things_onscroll, 25));
function do_things_onscroll(){
//[do things]
}
请注意,我仍然在利用Lodash实用程序,但您可以使用其他一些库,如下划线,或者只查找限制的代码。可能:
$(窗口)。关闭(“滚动”)
可能:$(窗口)。关闭(“滚动”)
第一个解决方案有效。我觉得越简单越好。无论如何,我需要测试它,看看是否可以利用其他功能添加到函数中。谢谢。本质上,once()只是(也许)一种更优雅的方法,而throttle()可以在滚动过程中节省内存/cpu。它允许在滚动期间以固定的间隔进行较少的函数调用。这几乎总是一个更好的解决方案,就像debounce()onresize一样。如果你有空闲时间,看看这里:第一个解决方案奏效了。我觉得越简单越好。无论如何,我需要测试它,看看是否可以利用其他功能添加到函数中。谢谢。本质上,once()只是(也许)一种更优雅的方法,而throttle()可以在滚动过程中节省内存/cpu。它允许在滚动期间以固定的间隔进行较少的函数调用。这几乎总是一个更好的解决方案,就像debounce()onresize一样。如果你有空闲时间,请看这里: