【问题标题】:Using a callback function in jQuery在 jQuery 中使用回调函数
【发布时间】:2018-08-17 11:45:39
【问题描述】:

我已经为此烦恼了好几个小时了,我对 javascript 整体还是很陌生,所以请多多包涵。

我想要达到的目标:

  • 在视频播放前显示 3 秒 div(使用 Vimeo api)

我的尝试:

  • 我尝试过使用 .setTimeOut,但问题是它只触发一次,所以视频播放不到一秒然后就停止了。
  • .setTimeInterval 在我的情况下也不起作用,因为它会间隔触发而不是连续触发。
  • .delay() 仅适用于 jquery 效果(如果我错了,请纠正我)

我现在正在尝试什么;使用回调参数

  • 我正在尝试添加一个回调,以便它在执行第一个函数后触发我的第二个函数(视频在其中开始),延迟 (3000)

我的代码

// SHOW DIV 3 SECONDS BEFORE VIDEO STARTS
(function($) {

  $(document).on("click", "a.short-button", function videoStart(callback) {

    $('.short_preloader').fadeIn().delay(3000).fadeOut();
    callback();

  });

  // DO THIS FUNCTION AFTER THE DELAY
  videoStart(function() {

    var vidframe = $('.embed-container.short-embed iframe'),
      status = $('.status');

    vidframe(function() {

      var player = $f(this);
      player.api('play');

    });

  });

})(jQuery);

我的函数显示 .short_preloader div 3 秒,然后应该触发代码的第二部分。

非常感谢您!

维克多

【问题讨论】:

标签: javascript jquery function callback


【解决方案1】:

fadeOut 异步工作。你需要等待它完成,然后调用callback函数:

代替

$('.short_preloader').fadeIn().delay(3000).fadeOut();
callback();

这样做:

$('.short_preloader').fadeIn().delay(3000).fadeOut(callback);

请参阅以下示例,其工作方式如您所愿:

$('button').click(function() {
  $('.ad').fadeIn().delay(3000).fadeOut(play);
});

function play() {
  $('.video').show();
  console.log('playing video');
}
.ad, .video {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button>Start video</button>

<div class="ad">An ad</div>
<div class="video">Video player</div>

【讨论】:

  • @Victor -- 你试图调用一个函数而不定义它。这是一个语法错误;观察控制台日志以验证它。请参阅我在答案中附加的演示 sn-p,并尝试更改类似的代码。
  • 感谢您对我的支持,我已经修复了语法错误,它会触发第二个函数,但只持续不到一秒钟。你知道我该如何解决这个问题吗?
  • @Victor -- 我不确定这是什么意思,但我可以看到在视频播放前大约 3 秒出现了一个绿色框。
  • 延迟有效,您的修复程序也会触发回调,但视频播放不到一秒钟,然后再次停止。
  • 问题是谷歌浏览器!它适用于 Safari 和 Firefox,但由于某种原因,Chrome 在不到一秒的时间内停止播放视频..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多