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

Posted

技术标签:

【中文标题】悬停时对于不同的音频文件只有一个 jquery 函数【英文标题】:Only one jquery function for different audio files on hover 【发布时间】:2018-07-01 14:37:10 【问题描述】:

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

$(".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);

);

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

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我的解决方案是使用闭包

$('.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 上发生变化。

【讨论】:

感谢您的回答。但是这两个音频文件都会被播放,对吧?还是我看错了? 对不起,我之前没有发现差异,我会更新我的回复 感谢更新。我试过这样:jsfiddle.net/fczb7t8v/3 但它不起作用。猜我做错了什么 你的代码看起来很不错,唯一的问题是你应该只从闭包中返回一个函数。这是onHoverStartPlayAudio的一个闭包,另一个是onHoverEndPauseAudio的闭包。跨度> 完美运行!我能再问你一件事吗?你看到我在之前评论中发送的小提琴中的 css 函数了吗?只为我悬停的 css 选择类的最佳方法是什么?例如:悬停 $(".textOne p") 更改 $(".textOne p").css

以上是关于悬停时对于不同的音频文件只有一个 jquery 函数的主要内容,如果未能解决你的问题,请参考以下文章

悬停时播放音频文件(鼠标悬停时停止播放)

不同按钮上的音频播放/暂停单击Jquery

使用 jQuery 单击另一个音频文件时停止/暂停音频

JQuery 获取/设置当前时间“广播电台”

JQuery获取/设置currentTime“无线电台”

悬停或单击时的 Jquery 下拉菜单