[英]Weird flicker in jQuery toggle
我有一個奇怪的問題,無論我嘗試什么,我都找不到解決方案。 我有一個簡單的菜單,可以切換幾個div(向上/向下滑動),如下所示:
<div class="navigation">
<ul class="left">
<li><a href="#lorem1" class="menu">lorem1</a></li>
<li><a href="#lorem2" class="menu">lorem2</a></li>
<li><a href="#lorem3" class="menu">lorem3</a></li>
</ul>
</div>
和一些div被切換。很簡單,但是有很多代碼,所以我不會在這里粘貼。
使它起作用的腳本是:
$('.navigation a').click(function() {
var $requested = $(this.getAttribute('href'));
$('.top-drawer').not($requested).slideUp('slow');
$requested.slideToggle('slow')
});
一旦用戶單擊鏈接,div就會比應有的幅度向下滑動,然后閃爍,然后變為實際高度(高度應為)。
這是小提琴 。 請確保“結果”窗口的寬度至少為1000+像素,否則它將無法正常工作(錯誤不會顯示)。
嘗試了解您正在使用的代碼。
這就是我認為jQuery的slideUp()
和slideDown()
起作用的方式; 主要的算法改變height
的元件的,並display
了后height
等於height
的元件或為“0”的。
因此,當您將元素的position
設置為relative
您將看到被稱為“閃爍”的信息,特別是當您在同一位置有多個元素時。 當您使用fadeIn()
, fadeOut()
等時,您還將看到這些“閃爍”,因為在這些情況下,元素的display
不是立即設置為“ none”或任何可見的,而是在動畫完成之后。
解:
將元素的位置設置為絕對位置。 那應該可以解決您的問題; 例子
看到我對這個JSFIDDLE的建議
這里是那里的變化的解釋:
由於每個.top-drawer
都包含所有這些浮動元素,因此jQuery在計算div
的高度時會遇到很多問題,因為元素會在上下滑動時四處移動。
改為改為inline-block
。 但是,要使其與CSS一起使用,尤其是與每個.top-drawer
上的填充一起使用,您需要使用box-sizing: border-box;
在任何使用padding
, inline-block
和width
與%的對象上 。 如果好奇,您可以在這里閱讀。
如果您選擇inline-block
路線(現在是最佳做法)。 您將需要使用jQuery 1.8.xx或更高版本。 我在您的小提琴中注意到,您使用的是1.7.2,它有一個關於border-box
的錯誤,此錯誤在之后的版本border-box
已得到修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.