jquery - 悬停时只有一个jquery函数可用于不同的音频文件

标签 jquery audio hover dry

我正在悬停文本时开始播放音频,如下所示:

$(".textOne p").hover(function() {

  $(".audioOne")[0].play();
  $(".audioOne")[0].volume = 0;
  $(".audioOne").animate({
    volume: 1
  }, 800);

}, function() {

  $(".audioOne").animate({
    volume: 0
  }, 800);

  timeOutAudio = setTimeout(function() {
    $(".audioOne")[0].pause();
    $(".audioOne")[0].currentTime = 0;
  }, 800);

});

//REPEATING FOR SECOND AUDIOFILE

$(".textTwo p").hover(function() {

  $(".audioTwo")[0].play();
  $(".audioTwo")[0].volume = 0;
  $(".audioTwo").animate({
    volume: 1
  }, 800);

}, function() {

  $(".audioTwo").animate({
    volume: 0
  }, 800);

  timeOutAudio = setTimeout(function() {
    $(".audioTwo")[0].pause();
    $(".audioTwo")[0].currentTime = 0;
  }, 800);

});


但我想避免必须复制每个音频文件和文本的功能。有人知道在这里不重复自己的最好方法是什么吗?

感谢您的帮助。

最佳答案

我的解决方案是使用闭包:

$('.textOne p').hover(onHoverStartPlayAudio('.audioOne'), onHoverEndPauseAudio('.audioOne')) ;
$('.textTwo p').hover(onHoverStartPlayAudio('.audioTwo'), onHoverEndPauseAudio('.audioTwo')));
function onHoverStartPlayAudio(audioName) {
    return function (event) {
        $(audioName).on('timeupdate', function() {
            $(event.target).css({
                "background-size": this.currentTime / this.duration * 100 + '%' + '100%',
            });
        });

        $(audioName)[0].play();
        $(audioName)[0].volume = 0;
        $(audioName).animate({ volume: 1 }, 800);
    } 
}

function onHoverEndPauseAudio(audioName){
    return function() {
        $(audioName).animate({ volume: 0 }, 800);
        timeOutAudio = setTimeout(function() {
            $(audioName)[0].pause();
            $(audioName)[0].currentTime = 0; 
         }, 800);
    } 
} 
然后,在内部函数中,您可以使用audioName,它会根据所悬停的按钮包含.audioOne.audioTwo
让我知道解释是否足够清楚。
希望能帮助到你
编辑:
我已经从提供的JSFiddle中添加了代码,将鼠标悬停的元素的CSS更改为timeupdate

关于jquery - 悬停时只有一个jquery函数可用于不同的音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51124257/

相关文章:

javascript - Cordova-在Android上控制几种声音

Qpushbutton 悬停/按下图标

jquery - 使用 jQuery 时,我是否被迫使用 href ="#"?

jquery - 异步加载脚本文件

scala - 使用scalajs-react在音频元素的间隔上循环播放

javascript - 悬停并切换基本的javascript

html - 如何添加过渡时间以强调悬停效果

javascript - 对所有页面使用相同的 Handlebars 模板

javascript - Jquery,恢复时的事件?

Java - 声音在 Eclipse 中播放但在 .jar 中不播放