2016-08-16 14 views
0

我是jQuery和Javascript的初學者。感謝您的閱讀!如何讓jQuery動畫更少生成(視頻示例)

https://www.youtube.com/watch?v=s-E_VFbRruc這是一段視頻,展示了我的代碼動畫到目前爲止。正如你所看到的,當我將鼠標放在一個像素上,並且當包含該像素的矩形顯示時,會有滯後時間。

理想情況下,我希望動畫看起來像這樣:https://www.youtube.com/watch?v=rqU12MHzO-I,這次是我使用maphilight插件製作的一個示例。但是我不能在我的代碼中使用這個插件,因爲我想一次顯示多層矩形。

我用jQuery .show()方法顯示矩形(div),但是當我嘗試.show(「快速」)時,div隨機閃爍。

你對我應該試試的建議有什麼建議嗎?

相關的代碼是:

(我的代碼使用一個名爲「演示」與許多區域要素(矩形圖)追加到它在這段代碼我每個區域元素轉換爲CSS DIV所以我。能夠顯示和隱藏它們)

  if($('#demo').length >0) { 

       var hoveredElements = []; 
       var elementPositions = []; 

       $('#demo area').each(function() { 
       var offset = this.coords; 
       var coordarray = offset.split(","); 
       var l = coordarray[0]; 
       var t = coordarray[1]; 
       var r = coordarray[2]; 
       var b = coordarray[3]; 
       var ident = this.id; 
       var w = r - l; 
       var h = b - t;  
       var elementDiv = $('<div class="area"></div>') 
        .css({position: 'absolute', left: l + 'px', top: t + 'px', border: 'solid', borderColor: 'green'}). 
        width(w).height(h); 
       $("body").append(elementDiv); 
       elementDiv.hide(); 

       elementPositions.push({ 
        element: elementDiv, 
        top: t, 
        bottom: b, 
        left: l, 
        right: r, 
        id: ident, 
       }); 

       }); //end of demo area 

       $("body").mousemove(function(e) { 
       hoveredElements.forEach(function(item) { 
        item.overlay.hide(); 
        item.element.hide(); 
       }); 

       hoveredElements = []; 

       var xPosition = e.pageX; 
       var yPosition = e.pageY; 

       for (var ie = 0; ie < elementPositions.length; ie++) { 
        var id = elementPositions[ie].id; 
         if (xPosition >= elementPositions[ie].left && 
         xPosition <= elementPositions[ie].right && 
         yPosition >= elementPositions[ie].top && 
         yPosition <= elementPositions[ie].bottom) { 
         // The mouse is within the element's boundaries 
          hoveredElements.push({ 
          overlay: $('#overlay' + id), 
          element: elementPositions[ie].element, 
         }); 
         } 
       } 

       hoveredElements.forEach(function(item) { 
        item.overlay.show(); 
        item.element.show(); 
       }); 

      }); 

     }; 
+4

顯示一些代碼。 – powerbuoy

+0

我編輯過這個問題,其中包含一些代碼 – FSS

+1

'.show(「fast」)'使元素在動畫中展開爲其全尺寸。因此,當它將自身設置爲'0'高度時,您不會再將其懸停,因此它會直接恢復其全部大小,並且您將[再次,一次又一次地將其懸停](https:// www.youtube.com/watch?v=9VDvgL58h_Y&feature=youtu.be&t=4m28s)所以它閃爍。但是,代碼將幫助我們看到我們能做些什麼。 – blex

回答

2

我傾向於試圖依靠CSS來隱藏和顯示內容,只要有可能。例如,這裏的CSS懸停選擇器可能很有用。它非常即時,並且不需要等待JavaScript邏輯的開銷。

請注意,在這段代碼中,除非在結果的左上角將鼠標放在它們上方,否則塊不可見。這似乎更多的是你在找什麼。當懸停不再被應用時,它將恢復其原始狀態。通過將單個可重用類應用於您的div,可以將css單獨應用於每個div - 只有該div - 必要時。我這種情況下,當時「必要」是懸停在那個div上。

div { 
 
    position: aboslute; 
 
    top:0px; 
 
    left: 0px; 
 
    height: 30px; 
 
    width: 60px; 
 
    background: white; 
 
    border: none; 
 
    display: block; 
 
    } 
 

 
.rect:hover { 
 
    background: blue; 
 
    border: 1px solid black; 
 
}
<div class='rect' ></div> 
 
<div class='rect' ></div> 
 
<div class='rect' ></div>

+0

感謝您的酷炫演示和建議!如果你有興趣看到它,我已經在我的問題中包含了我的代碼的相關部分。但我完全可以從這個建議中學習。 – FSS