Мое решение было бы использовать замыкания :
$('.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
в зависимости от того, какая кнопка была перемещена.
Дайте мне знать, если объяснение достаточно ясное.
Надеюсь, это поможет
Edit:
Я добавил код из предоставленного JSFiddle , CSS элемента поиска будет меняться на timeupdate
.