Итак, у меня есть веб-сайт, который загружает гифки, приостановленные в начале. У меня есть функции .on ("событие"), которые отлично работают отдельно, при щелчке и наведении курсора. Однако я хотел бы позволить пользователю выбирать, какой из этих методов он хотел бы использовать для воспроизведения гифки с настройкой. Код, с которым я работаю, выглядит примерно так:
if (hoverOn) {
$(document).on("hover", ".content", function () {
playTheGif ();
}
}
else {
$(document).on("click", ".content", function () {
playTheGif ();
и, конечно же, при нажатии он приостанавливает гифку, если она уже воспроизводится.
У меня есть кнопки для установки bool hoverOn, и это работает для изменения bool, но не перезагружает страницу, поэтому триггер для воспроизведения gif остается прежним, даже если bool меняется. Есть ли способ сделать этот поиск if / else динамическим на странице?
Спасибо, надеюсь, я достаточно объяснил.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Переключите положение логического теста и обработчиков так, чтобы логическое значение проверялось внутри обработчиков:
$(document).on("hover", ".content", function () {
if (hoverOn) playTheGif ();
})
$(document).on("click", ".content", function () {
if (!hoverOn) playTheGif ();
});
Вы можете отменить текущие события и установить новые, когда пользователь переключает hoverOn. Например:
if (hoverOn) {
$(".content").unbind("click");
$(document).on("hover", ".content", function () {
playTheGif ();
}
}
else {
$(".content").unbind("hover");
$(document).on("click", ".content", function () {
playTheGif ();
}
}
Я бы, наверное, попробовал их совместить.
$(document).on("click mouseenter", ".content", function (e) {
//do nothing for hoveron,click or hoveroff,hover
if (hoverOn ^ e.type === "mouseenter") return;
playTheGif ();
});
var hoverOn = true;
$(document.body).on("click mouseenter", ".content", function (e) {
//do nothing for hoveron,click or hoveroff,hover
if (hoverOn ^ e.type === "mouseenter") return;
//playTheGif ();
$(e.target).css('backgroundColor', 'green');
});
$('button').on('click', function(){
hoverOn = !hoverOn;
$('#interaction').text(hoverOn ? 'hover' : 'click' );
$('.content').css('backgroundColor', '');
});.content {
display: inline-block;
width: 150px;
height: 150px;
background-color: red;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "content"></div>
<div class = "content"></div>
<div class = "content"></div>
<div class = "content"></div>
<div>
<button>Toggle Interaction</button>
<span id = "interaction">hover</span>
</div>
Это именно то, что мне нужно. Не могу поверить, что это не пришло мне в голову. Спасибо.