如何使jQuery动画不那么不稳定(视频示例)

How to make jQuery animation less jerky (video example)

本文关键字:视频 不稳定 jQuery 何使 动画      更新时间:2023-09-26

我是jQuery和Javascript的初学者。感谢您的阅读!

https://www.youtube.com/watch?v=s-E_VFbRruc这是一个演示我的代码动画到目前为止的视频。正如你所看到的,在我将鼠标移到一个像素和包含该像素的矩形显示之间存在滞后时间。

理想情况下,我希望动画看起来像这样:https://www.youtube.com/watch?v=rqU12MHzO-I,这次是我使用maphilight插件制作的一个例子。但是我不能在我的代码中使用这个插件,因为我想一次显示多个矩形图层。

我用jQuery .show()方法显示矩形(div),但是当我尝试。show("fast")时,div随机闪烁。

你有什么建议我应该试试吗?

相关代码为:

(我的代码使用了一个名为"demo"的地图,其中添加了许多区域元素(矩形)。在这段代码中,我将每个区域元素转换为CSSdiv,以便能够显示和隐藏它们

            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();
                });
            }); 
        }; 

我倾向于尽可能地使用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>