Проблемы с функцией jQuery animate?
-
08-07-2019 - |
Вопрос
Мне нужен был простой слайдер с тремя слайдами, поэтому вместо использования плагина jQ я вручную закодировал его сам.Код работает, но анимация выполняется в 2-3 кадра вместо более чем 20 кадров, за исключением случаев, когда в IE6 и IE7 анимация выполняется идеально в 20-30 кадрах.Во всех других браузерах (IE8, Firefox, Chrome, Safari, Opera) он анимируется в движении, которое выглядит так, как будто компьютер зависает.Если кто-нибудь знает, почему это происходит, пожалуйста, дайте мне знать.Я не хочу использовать громоздкий плагин, а затем стилизовать его тоже.
HTML:
<div class="fl-left" id="slide-box">
<div class="slide" id="slide-1">
<img src="images/slider/1.jpg" alt="The Image Description" />
<p class="slide-text">"The Description About The Image/Slide"</p>
</div>
<div class="slide" id="slide-2">
<img src="images/slider/1.jpg" alt="The Image Description" />
<p class="slide-text">"The Description About The Image/Slide"</p>
</div>
<div class="slide" id="slide-3">
<img src="images/slider/1.jpg" alt="The Image Description" />
<p class="slide-text">"The Description About The Image/Slide"</p>
</div>
</div>
CSS - файл:
#slide-box{
position:relative;
width:472px;
height:192px;
border-bottom:3px solid #fff;
overflow:hidden;
}
.slide{ position:absolute;
float:left; width:455px;
overflow:hidden;
border:1px solid #000;
margin:8px 8px 0 8px;
}
.slide img{ float:left; }
.slide-text{ display:block;
width: 140px;
height:132px;
background:#ecefdc;
float:left;
padding: 10px 0px;
}
#slide-1 { left:0px; }
#slide-2 { left:467px; }
#slide-3 { left:934px; }
jQuery - jQuery - запрос:
$('#slide-but-1').click(function(){
$('#slide-1').animate({"left": "0px"}, "slow");
$('#slide-2').animate({"left": "467px"}, "slow");
$('#slide-3').animate({"left": "934px"}, "slow");
});
$('#slide-but-2').click(function(){
$('#slide-1').animate({"left": "-467px"}, "slow");
$('#slide-2').animate({"left": "0px"}, "slow");
$('#slide-3').animate({"left": "467px"}, "slow");
});
$('#slide-but-3').click(function(){
$('#slide-1').animate({"left": "-934px"}, "slow");
$('#slide-2').animate({"left": "-467px"}, "slow");
$('#slide-3').animate({"left": "0px"}, "slow");
});
Решение 2
Код конфликтовал с плагином jQuery Drop Shadow, который я использовал.Удаление этого сделало анимацию плавной.
Другие советы
Я подозреваю, что проблема заключается в стилизации слайдов, а именно в float: left
- это излишне, поскольку вы используете абсолютное позиционирование.
Кроме того, вы могли бы добиться лучшей производительности, если бы у вас был дополнительный контейнер со слайдами, например, этот:
<div class="fl-left" id="slide-box">
<div id="slide-container">
<div class="slide" />
<div class="slide" />
<div class="slide" />
</div>
</div>
Таким образом, вы могли бы анимировать только контейнер, $('#slide-container').animate({ left: 0 }, "slow");
- и результирующий код будет более чистым.