gpt4 book ai didi

Javascript slider 在一段时间后疯狂滑动

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:56 26 4
gpt4 key购买 nike

如果我将此 slider 留在网站上一段时间,它就会开始疯狂滑动。如何测试这个错误?打开 bellated.com/vyrai(测试页面)。你可以看到大变化的照片。离开它一分钟。或两个并浏览其他浏览器选项卡,当您返回此站点时,您将看到 slider 的错误。有什么解决办法吗?

我正在使用这个脚本:

        <script type="text/javascript">
$(document).ready(function() {

var currentPosition = 0;
var slideWidth = 673;
var slides = $('.slide');
var numberOfSlides = slides.length;
var slideShowInterval;
var speed = 6000;

//Assign a timer, so it will run periodically
slideShowInterval = setInterval(changePosition, speed);

slides.wrapAll('<div id="slidesHolder"></div>')

slides.css({ 'float' : 'left' });

//set #slidesHolder width equal to the total width of all the slides
$('#slidesHolder').css('width', slideWidth * numberOfSlides);


manageNav(currentPosition);

//tell the buttons what to do when clicked
$('.nav').bind('click', function() {

//determine new position
currentPosition = ($(this).attr('id')=='rightNav')
? currentPosition+1 : currentPosition-1;

//hide/show controls
manageNav(currentPosition);
clearInterval(slideShowInterval);
slideShowInterval = setInterval(changePosition, speed);
moveSlide();
});

function manageNav(position) {
//hide left arrow if position is first slide
if(position==0){ $('#leftNav').hide() }
else { $('#leftNav').show() }
//hide right arrow is slide position is last slide
if(position==numberOfSlides-1){ $('#rightNav').hide() }
else { $('#rightNav').show() }
}


//changePosition: this is called when the slide is moved by the timer and NOT when the next or previous buttons are clicked
function changePosition() {
if(currentPosition == numberOfSlides - 1) {
currentPosition = 0;
manageNav(currentPosition);
} else {
currentPosition++;
manageNav(currentPosition);
}
moveSlide();
}


//moveSlide: this function moves the slide
function moveSlide() {
$('#slidesHolder').animate({'marginLeft' : slideWidth*(-currentPosition)});
}

});
</script>

html 实现示例:

<div id="slideshow"> <div id="slideshowWindow"> 
<div class="slide"><div class="slideText"> <h2 class="slideTitle">Pas mus kainos visada lanks&#269;ios!</h2> <p class="slideDes">"Tik pas mus &#303;sigykite savo nauj&#261;j&#261; vandens filtravimo sistem&#261; palankiausiomis kainomis".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide-->
<div class="slide"><div class="slideText"> <h2 class="slideTitle">Naujas prekybos salonas</h2> <p class="slideDes">"Aplankykite mus naujai atsidariusiame prekybos salone &#352;ilal&#279;je S. Dariaus ir S. Gir&#279;no g. 24".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide-->
<div class="slide"><div class="slideText"> <h2 class="slideTitle">Ie&#353;kote galimybi&#371; partneriaujant?</h2> <p class="slideDes">"Susisiekite su mumis ir mes aptarsime abiem pus&#279;ms palankias s&#261;lygas!".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide-->
<div class="slide"><div class="slideText"> <h2 class="slideTitle">Turite klausim&#371;?</h2> <p class="slideDes">"Susisiekite su mumis ir m&#363;s&#371; specialistai pasistengs atsakyti &#303; kiekvien&#261; j&#363;s&#371; u&#382;klaus&#261;.".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide-->
</div></div>

最佳答案

这个问题有多种原因,所有这些都在一场完美的 Storm 中共同作用:

  • 您正在完全根据计时器对新幻灯片进行排队,而您应该在上一张幻灯片动画的回调中对它们进行排队,
  • 您正在使用支持 requestAnimationFrame 的浏览器,并且
  • 您使用的是 jQuery 1.6.2,其中包括对 requestAnimationFrame 的支持。

当您离开运行 slider 的选项卡时,支持 requestAnimationFrame 的浏览器将停止该选项卡中运行的所有动画。但是,计时器将继续运行!当您返回页面时,所有排队的动画都会立即触发,这会给您带来这种失控效果。

要解决此问题,最简单的解决方案是升级到 jQuery 1.7.1,因为由于浏览器支持不一致,他们已经取消了对 requestAnimationFrame() 的支持。但是,他们最终会把它带回来,所以你真的应该只修复你的代码。

要修复您的代码,您应该只在上一张幻灯片的 .animate()回调 中排队新的幻灯片动画。这将确保您即使在动画未运行时也不会盲目排队。

如果您需要更多说明,请告诉我。 tl;dr:改变这个:

 <script src="js/jquery-1.6.1.min.js" type="text/javascript"></script>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>

对此:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

关于该问题的 jQuery 错误有更多信息:http://bugs.jquery.com/ticket/9381

关于Javascript slider 在一段时间后疯狂滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8665479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com