javascript - 创建随机图像交换并抑制鼠标悬停事件

标签 javascript

我试图创建一小段代码,将图像放在 HTML 页面上,然后当用户将鼠标悬停在其上时,每次都会出现一个新图像。我的代码的问题是,如果您在图像内移动鼠标,则由于鼠标悬停事件没有停止,各种图像会不稳定地闪烁。另一个小问题是,如果数组中的 0 索引处没有空占位符,我就无法让它工作。

我更好奇的是我应该如何看待问题而不是实际的解决方案。

<div id="myImage">
    <img id="theImg" src="whatever.png" alt="yay" height="42" width="42">
</div>

<script>

    imgs = ['placeholder','house','piggy','food'];

    $('#myImage').mouseenter(function(){

        $( "#theImg" ).remove();

        var rand = Math.floor(Math.random()*3)+1;

        $('#myImage').append('<img id="theImg" src=' + imgs[rand]  +'.png' + '>');

        console.log(imgs[rand]);
    });

</script>

最佳答案

我认为闪烁是由于您没有为新图像元素设置高度或宽度,因此发生了以下事件链:

  • mouseenter 触发,导致删除当前 img 元素并插入新元素
  • 这个新图像没有宽度或高度信息,因此在加载图像数据时元素会缩小到 0x0
  • 现在浏览器有了图像数据,它可以直接从数据中获取宽度和高度,并将 img 设置为具有这些尺寸
  • 因此,img 元素会扩展至此大小,从而使其在光标下扩展,从而触发另一个 mouseenter 事件

要避免这种情况,请在插入的 img 元素上设置宽度和高度,或者仅更改元素的 src 而不是胡乱删除和插入元素.

关于javascript - 创建随机图像交换并抑制鼠标悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20584651/

相关文章:

javascript - 不知道如何将栅格应用于我的代码中的每个行星

javascript - 如何在 Angular javascript中从另一个 Controller 调用一个 Controller 方法?

javascript - 在单独的文件中指定路线时无法找到路线

javascript - 图像上传功能在 Angular 6 中不起作用

javascript - javascript 中有类似快速可选链接的东西吗?

javascript - Vue js 和收藏/喜欢按钮

javascript - 如何用 JavaScript 在 Canvas 上绘制圆 Angular 矩形的下半部分

javascript - afterCreate 数据库 Hook 进程准备就绪后如何向客户端发送消息?

javascript - 在javascript中调用对象内部的对象函数

javascript - Angular $localStorage 在浏览器关闭后保存