#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');