Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 触发滚动播放功能一次_Javascript_Jquery_Audio_Scroll_Mp3 - Fatal编程技术网

Javascript 触发滚动播放功能一次

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

我想在滚动到定义的id计数器时播放声音。它很好用,但我想玩一次。当有人再次向上或向下滚动时,音乐就成了一种循环。如何阻止这种情况

//点击#计数器时,在滚动条上播放倒计时声
$(窗口)。滚动(函数(){
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一样。如果你有空闲时间,请看这里: