2015-08-21 95 views
2

我的目標是在div上添加一個懸停類,並對它有一個轉換效果。但是我需要首先將該元素附加到父級,只是爲了使其始終位於其他級別之上。當z索引不可用時(例如,SVG沒有z索引),這是一種模擬z索引效應的技巧。jQuery .append()不同步?

但在示例1中,轉換效果不起作用。我的假設是addClass()發生在元素完成追加之前。這樣的過程是這樣的,

呼叫追加()=>添加類元素=>過渡開始=>附加 元件,並且電流的過渡被取消=>附加()光潔度沒有其他=> 發生轉換

爲了證明我的假設,在示例2中,我使用setTimeout()調用來環繞addClass()。在這種情況下,轉換正常進行。

那麼我的假設是正確的?例2中的解決方案是否解決了這個問題?請幫忙,謝謝!

$('.inner').hover(function(){ 
 
    var item = $(this) 
 
    item.parent().append(this); 
 
    if ($('#sel').val() == "1") { 
 
     item.addClass("hover"); 
 
    } else { 
 
     setTimeout(function(){ 
 
      item.addClass("hover"); 
 
     }, 0) 
 
    }  
 
}, function(){ 
 
    $(this).removeClass("hover"); 
 
});
.inner { 
 
    position: absolute; 
 
    width: 50px; 
 
    height: 50px; 
 
    background: #999; 
 
    transform: scale(1.0); 
 
    transition: all 0.3s ease-in; 
 
} 
 
.inner.hover { 
 
    transform: scale(1.1) 
 
} 
 
.outer { 
 
    height: 100px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="outer"> 
 
    <div class="inner" style="left: 0px;">1</div> 
 
    <div class="inner" style="left: 100px;">2</div> 
 
    <div class="inner" style="left: 200px;">3</div> 
 
</div> 
 
<select id="sel"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
</select>

+0

我認爲這是小約()所做的.append,以及更多關於瀏覽器還沒有渲染的元素呢。但是這與你所說的並不遙遠。 –

+0

爲什麼不在不使用jquery添加懸停類的情況下在純CSS中進行轉換?即:內:懸停{} – JDL

回答

1

以下具有相同的效果,而無需使用jQuery。除非有特別的理由使用jQuery來添加懸停效果。

.inner { 
 
    position: absolute; 
 
    width: 50px; 
 
    height: 50px; 
 
    background: #999; 
 
    transform: scale(1.0); 
 
    transition: all 0.3s ease-in; 
 
} 
 
.inner:hover { 
 
    transform: scale(1.1) 
 
} 
 
.outer { 
 
    height: 100px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="outer"> 
 
    <div class="inner" style="left: 0px;">1</div> 
 
    <div class="inner" style="left: 100px;">2</div> 
 
    <div class="inner" style="left: 200px;">3</div> 
 
</div> 
 
<select id="sel"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
</select>

+0

是的,這有一個特別的原因。因爲我需要對SVG元素執行追加技巧。通過這樣做,在Firefox中,懸停狀態將會丟失。所以我需要手動添加懸停類到元素。 – wendong