jQuery / fadeIn、fadeOut 将窗口滚动到顶部

发布于 2024-10-16 03:40:20 字数 2881 浏览 6 评论 0 原文

干杯,

我用 jQuery 轮播来旋转几个图像,有一个奇怪的副作用 - 每次它淡入(或淡出?)时,窗口都会滚动到顶部。有时它会滚动到父对象的顶部,有时甚至更高 - 似乎没有此副作用引用的真正锚点或坐标。这是标记(我从 SO 答案中借用了脚本的一些行,但我现在找不到作者,抱歉......)。

HTML

<div id="carousel">
<div id="carousel_inner">
<ul id="carousel_ul">

<li>
<p><a href="url_1">Label 1</a></p>
<a href="url_1"><img src="src_1" /></a>
</li>

<li>
<p><a href="url_2">Label 2</a></p>
<a href="url_2"><img src="src_2" /></a>
</li>

<li>
<p><a href="url_3">Label 3</a></p>
<a href="url_3"><img src="src_3" /></a>
</li>

<li>
<p><a href="url_4">Label 4</a></p>
<a href="url_4"><img src="src_4" /></a>
</li>

</ul>
</div>
</div>

UL 中包含的元素按以下顺序显示:123、234、341、412、123...它们被认为是一起淡出和淡入的。 这是 JS 代码:

$(document).ready(function() {

        var item_width = $('#carousel_ul li').outerWidth()+10;
        var left_indent = parseInt($('#carousel_ul').css('left')) - item_width;
        var counter = 0;

        $('#carousel_ul').hover(function(){
                                         clearInterval(spinner);
                                         },
                                function(){
                                        spinner = setInterval(spin, tempo);
                                    }
                                );

        function spin(){
                $('#carousel_ul').fadeOut(300,function(){
                    $('#carousel_ul').css('left' , left_indent);
                    $('#carousel_ul li:last').after($('#carousel_ul li:first'));
                    $('#carousel_ul').css('left','0px');
                });
                $('#carousel_ul').fadeIn(300);
        }

        var spinner = setInterval(spin, tempo);

  });

最后是 CSS

#carousel_inner {
float:left;
width:950px;
overflow: hidden;
background: #fff;
}

#carousel_ul {
position:relative;
left:0px; 
list-style-type: none; 
margin: 0px;
padding: 0px;
width:9999px;
padding-bottom:10px;
}

#carousel_ul li{
float: left;
width:310px;
padding:0px;
height:310px;
background: #fff;
margin-top:10px;
margin-bottom:10px;
margin-left:0px;
margin-right:10px;
line-height: 310px;
}

#carousel_ul li a { 
display: block; 
color: #000; 
text-decoration: none; 
font-weight:normal; 
font-size: 1.5em;
}

#carousel_ul li p { 
display: none; 
}

#carousel_ul li:hover p { 
display: block;
z-index: 1000; 
position: absolute; 
background: url(../images/home-opener-bg.png); 
width: 310px;
height: 310px;
top: 10px;
text-align: center;
margin: 0px;
padding: 3px 5px; 
}

#carousel_ul li img {
.margin-bottom:-4px;
border:0px;
position: relative;
}

所以我的问题是:为什么它会跳转?

Cheers,

I have a strange side effect from a jQuery carousel I am using to spin couple of images - every time it fades in (or fades out?), the window is scrolled to the top. Sometimes it scrolls to the top of the parent object, sometimes even higher - there seems to be no real anchor or coordinates which this side effect references. Here is the markup (I have borrowed some lines of the script from SO answers, but I can't find the author now, sorry...).

HTML

<div id="carousel">
<div id="carousel_inner">
<ul id="carousel_ul">

<li>
<p><a href="url_1">Label 1</a></p>
<a href="url_1"><img src="src_1" /></a>
</li>

<li>
<p><a href="url_2">Label 2</a></p>
<a href="url_2"><img src="src_2" /></a>
</li>

<li>
<p><a href="url_3">Label 3</a></p>
<a href="url_3"><img src="src_3" /></a>
</li>

<li>
<p><a href="url_4">Label 4</a></p>
<a href="url_4"><img src="src_4" /></a>
</li>

</ul>
</div>
</div>

The elements contained in the UL are shown in the following sequence: 123, 234, 341, 412, 123... They are thought to fade out and fade in together.
Here is the JS code:

$(document).ready(function() {

        var item_width = $('#carousel_ul li').outerWidth()+10;
        var left_indent = parseInt($('#carousel_ul').css('left')) - item_width;
        var counter = 0;

        $('#carousel_ul').hover(function(){
                                         clearInterval(spinner);
                                         },
                                function(){
                                        spinner = setInterval(spin, tempo);
                                    }
                                );

        function spin(){
                $('#carousel_ul').fadeOut(300,function(){
                    $('#carousel_ul').css('left' , left_indent);
                    $('#carousel_ul li:last').after($('#carousel_ul li:first'));
                    $('#carousel_ul').css('left','0px');
                });
                $('#carousel_ul').fadeIn(300);
        }

        var spinner = setInterval(spin, tempo);

  });

and finally CSS

#carousel_inner {
float:left;
width:950px;
overflow: hidden;
background: #fff;
}

#carousel_ul {
position:relative;
left:0px; 
list-style-type: none; 
margin: 0px;
padding: 0px;
width:9999px;
padding-bottom:10px;
}

#carousel_ul li{
float: left;
width:310px;
padding:0px;
height:310px;
background: #fff;
margin-top:10px;
margin-bottom:10px;
margin-left:0px;
margin-right:10px;
line-height: 310px;
}

#carousel_ul li a { 
display: block; 
color: #000; 
text-decoration: none; 
font-weight:normal; 
font-size: 1.5em;
}

#carousel_ul li p { 
display: none; 
}

#carousel_ul li:hover p { 
display: block;
z-index: 1000; 
position: absolute; 
background: url(../images/home-opener-bg.png); 
width: 310px;
height: 310px;
top: 10px;
text-align: center;
margin: 0px;
padding: 3px 5px; 
}

#carousel_ul li img {
.margin-bottom:-4px;
border:0px;
position: relative;
}

So my question is: why does it jump?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄居人 2024-10-23 03:40:20

单击 ul 下的锚标记返回 false

return false on a click of anchor tag under your ul

季末如歌 2024-10-23 03:40:20

如果我正确理解你的问题,一旦图像淡出,父级的显示属性将设置为无。因此 HTML 的其余部分会向上流动以填充空间。指定容器元素的高度就可以了。

在使用画廊时,我倾向于使用 jQuery Cycle 插件: http://jquery.malsup.com/cycle/< /a>

If I understand your question correctly, once the image fades out the display property of the parent is set to none. So the rest of the HTML just flows up to fill up the space. Specifying a height for the container element should do it.

I tend to use the jQuery Cycle plugin when working with galleries : http://jquery.malsup.com/cycle/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文