Функция задержки JavaScript / jQuery Div

#javascript #jquery #html #css #jsp

#javascript #jquery #HTML #css #jsp

Вопрос:

Я создал звездный рейтинг для сайта, и мне нужно закрыть div после того, как пользователь нажал на рейтинг. Мне удалось это сделать, но нужно добавить задержку в функцию, чтобы она занимала 2/3 секунды после того, как пользователь нажал на нее.

Я включил задержку в div, отображаемую с помощью jquery, как показано ниже, но на этот раз мне нужно добавить функцию javascript, и я не знаю, с чего начать.

 function testFunction() {
  var x = document.getElementById("video-rating");
  if (x.style.display === "none") {
      x.style=display = "block";
  } else {
      x.style.display = "none";
  }
}
  

Это jquery в моем документе JSP. Если есть способ добавить jquery в функцию, это было бы здорово, но я не уверен в этом.

 <script>
    $('#video-rating').hide(0).delay(4000).show(0);
</script>
  

Редактировать Я должен был быть более ясным, я передал тестовую функцию в onclick в пределах фактических звездных рейтингов, поэтому, когда они нажимаются, в данный момент функция запускается и закрывается!

Комментарии:

1. Ни один из приведенных выше кодов не закрывает div. Вы хотите снова показать его после задержки?

2. Извините за это, я должен был быть более ясным, я передал testFunction в onclick в пределах фактических звездных рейтингов, поэтому, когда они нажимаются, в данный момент выполняется функция и закрывается! @AliSheikhpour

3. $(‘#рейтинг видео’). задержка (4000).скрыть(0); $(‘#рейтинг видео’). задержка (0).показать(0);

4. @Deepak Спасибо, но, к сожалению, не работает. Знаете ли вы, как интегрировать задержку в уже выполненную функцию JS?

Ответ №1:

использование setTimout :

 // Define a timer as global variable so we can cancel it anywehere:
var mytimer; 

function testFunction() {
  //Clear previous click effect if exists:
  clearTimeout(mytimer);

  var x = document.getElementById("video-rating");

  //assigning the timeout to global variable we created before:
  mytimer = setTimeout(function(){
       if (x.style.display === "none") {
           x.style=display = "block";
       } else {
           x.style.display = "none";
       }
   },666); //666 miliseconds equals to 2/3 second
}
  

использование задержки Jquery:

 function testFunction() {
    $("#video-rating").delay(666).hide(0); //or toggle(0) if you want to show on next click
}
  

если вы хотите отменить предыдущий эффект щелчка, вы можете добавить stop() в очередь jquery:

 function testFunction() {
    $("#video-rating").stop().delay(666).hide(0); //or toggle(0) if you want to show on next click
}
  

Комментарии:

1. Отлично! Большое вам спасибо.

2. Али, прежде чем я попытаюсь сформулировать это как другой вопрос.. Знаете ли вы, возможно ли создать ее так, чтобы 2/3 секунды сбрасывались, если пользователь решит изменить свой ответ? Как и в настоящее время, если они нажимают первую звездочку и переключаются на вторую, таймер по-прежнему работает так, как если бы он был первым, если это имеет смысл. Я попытался обернуть функцию setTimeout вокруг последнего оператора else, но это не сработало. Любые возможные идеи?

3. Да, я дополню текущий ответ, чтобы ответить на ваш новый вопрос. Вы можете проголосовать за ответ, если он был полезен. @JackC98

4. Пожалуйста, проверьте ответ еще раз. Я добавил несколько комментариев и новых строк.@ JackC98

5. Я уже проголосовал! У меня возникла проблема с новым кодом, который вы прокомментировали, теперь он вообще задерживается после нажатия на рейтинг. @AliSheikhpour

Ответ №2:

изменить на

 function testFunction() {
  var x = document.getElementById("video-rating");
  if (x.style.display === "none") {
      x.style=display = "block";
  } else {
      setTimeout(function(){
          x.style.display = "none";
      },3000);
  }
}
  

Комментарии:

1. Это не позволит мне одобрить два ответа для работы, но большое вам спасибо, это было очень полезно.

Ответ №3:

используйте эту функцию Jquery, чтобы избежать установленного временного интервала

 $("#video-rating").hide('slow');
           (or)
$("#video-rating").hide('fade');