2016-08-16 4 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()メソッドで長方形(divs)を表示していますが、.show( "fast")を試してみると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のホバーセレクタが便利です。かなり瞬間的で、javascriptのロジックを待つオーバーヘッドは必要ありません。

このスニペットでは、結果の左上隅にマウスを置くまで、どのようにブロックが表示されないかを確認してください。これはあなたが探しているものの多くであるようです。ホバーがもはや適用されなくなると、ホバーは元の状態に戻ります。再利用可能な単一のクラスをdivに適用することで、必要に応じて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

関連する問題