Как уже отмечалось, вы можете легко использовать setTimeout и clearTimeout как таковые:
Здесь я попытался сохранить HTML-код похожим на ваш.В целях тестирования я избавился от второго h2 и сохранил только первый.Я удалил style = "display: none", чтобы я мог видеть элемент h2, который нужно щелкнуть и удерживать, и я добавил идентификатор "click-hold" для этих элементов h2, чтобы наши слушатели jQuery могли запускать
let timeout_id;
let time_passed = 0;
$("#click-hold").on("mousedown", function (e) {
e.preventDefault();
//set interval when mouse is held down; it will increase time_passed by 1 every 1000ms(1s) and
//append it to a div to show curr time passed
timeout_id = setInterval(()=>{time_passed+=1; $("#append_here").empty().append(time_passed);}, 1000);
});
$("#click-hold").on('mouseup', function (e) {
//button was released; clear interval that's been adding to time_passed
clearInterval(timeout_id);
//check if the time passed was greater or equal to 2(equivalent to 2s). This can be changed to 3,
//4, 5, etc with each representing time elapsed in seconds. If condition is met, redirect. If not,
//reset time_passed to 0
if(time_passed >= 2){
window.location.href="https://stackoverflow.com";
}else{
time_passed = 0;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<body style="text-align:center">
<p>PAGE WILL REDIRECT AFTER 2s HOLDING TEXT BELOW</p>
<div class="text-holder" id="button">
<div class="body-border load"></div>
<h2 class="text-holder-click show click-hold-anim" id="click-hold">CLICK AND HOLD</h2>
</div>
<p>Time Passed While Holding Text:</p>
<div id="append_here">0</div>
</body>
</html>
Таким образом, когда этот элемент удерживается, тайм-аут начинается с 2000 мс и, как только он достигает этого времени, он изменит URL окна, как вы ранее делалив отдельной функции.Если в какой-то момент мышь нажимает на этот элемент с id = "click-hold", то тайм-аут будет сброшен, и ничего не произойдет.
Я проверил это в моих собственных html-файлах, и это сработалоправильно, поэтому, пожалуйста, спросите, если что-то не работает должным образом