悬停时jQuery图像闪烁

Posted

技术标签:

【中文标题】悬停时jQuery图像闪烁【英文标题】:jQuery Image Flicker on Hover 【发布时间】:2014-01-07 06:20:04 【问题描述】:

我在 Vine 视频的顶部有一张图片。我希望图片在鼠标悬停时消失并在鼠标悬停时重新出现。换句话说,只有当鼠标悬停在图片上时,藤蔓才可见。

使用当前代码,我的图像闪烁进出。我认为问题可能出在图片背后的藤蔓上。我试过玩 z-index,但没有雪茄。

这是我的代码(我使用 span 来包装#picture)

  <div class = "vine-two media">
<span><img id = "picture" class = "on-top" src = "img/kanye.jpg"></span>

  <iframe id = "video" class="vine-embed adj-size"src="https://vine.co/v/bYDuAmjeH9r/embed/simple"frameborder="0"></iframe><script async src="//platform.vine.co/static/scripts/embed.js" charset="utf-8"></script>


<script>

 $(document).ready(function() 
    $('span').mouseover(function () 
           $('#picture').hide();
       ).mouseout(function () 
      $('#picture').show();
    );
);
</script>
</div>

CSS:

.on-top 
position: absolute;
z-index: 1000;
width: 240px;
height: 240px;

.adj-size
width: 240px;
height: 240px;

【问题讨论】:

我忘记添加了!就这么做了。 请同时发布相关的html 可能也需要看一些html 【参考方案1】:

您需要使用 mouseenter 和 mouseleave。 http://api.jquery.com/mouseenter/ 跟随该链接,您可以看到示例中的差异。鼠标悬停触发多重事件,这可能是闪烁的来源。

更新:

看到代码,我会将 iframe 设置为隐藏,直到它准备好播放。 Flash 会导致覆盖问题。 youtube 解决方案是http://www.youtube.com/embed/vRH3Kq5qDw4?wmode=opaque,它将闪存置于 wmode=opaque。 vine 也可能有一些东西。

【讨论】:

我也尝试过 mouseenter/mouseleave。出现同样的问题。 iframe 是否提供闪存? ***.com/questions/5281002/z-index-and-iframes flash 出现在其他内容之上,除非它使用 wmode="transparent" ***.com/questions/886864/… 无闪光灯。 Vine 在浏览器中使用 HTML5。【参考方案2】:

图像周围有跨度标签吗? 如果是,我可以想象您将鼠标悬停在跨度上,然后图像消失并且跨度变小(0x0 像素)并且鼠标无法再悬停在跨度上。

也许可以试试这样的:

<div class="completely_hovering_over_the_video" style="width:video_width;height:video_height" >
   <img id="picture" src="bla.jpg">
</div>

通过此代码,我试图向您展示一个完全覆盖视频并具有固定宽度和固定高度的 DIV。即使 IMG 变小或不可见,此 DIV 也不会更改其尺寸。如果您将鼠标悬停在 DIV 上,则会隐藏 IMG,反之亦然。

【讨论】:

没问题,伙计,玩得开心:D 确实如此。这将是更糟糕和更简洁的代码。【参考方案3】:

当它消失时,图像将注册 mouseout 事件,这将使图像再次出现。

一种可能的解决方案是尝试使用$('#picture').css('visibility','hidden'); 而不是使用hide(),并使用$('#picture').css('visibility','visible'); 来显示它。我认为这将防止 mouseOut 在图像被隐藏时触发,因为图像仍然存在,只是不可见。

【讨论】:

这一直有效,直到我鼠标离开,此时图片完全消失。 我拼错了visible。这可能就是问题所在。 同样的问题:/ 非常感谢您的帮助。【参考方案4】:

span 可以是您页面上的any span,因此这是一种糟糕的做事方式, 您需要更具体地使用您的选择器:

$(function()  // DOM ready shorthand

   $('.picture').hover(function () 
       $(this).fadeToggle(); // make video underneath visible
   );

   // other DOM ready stuff here

);

或者按照这个实现示例:DEMO

<div class="video">    
  <!-- video here -->
  <img src="image.jpg">    
</div>

.video
  position:relative;
  width:400px;
  height:280px;

.video img
  position:absolute;
  top:0;
  left:0;

$('.video').hover(function()
  $(this).find('img').fadeToggle();
);

解释基本技巧是将悬停事件指向共同的videoimg 父级,在本例中为DIV . video

这也可以:

$('.video').hover(function()
  $("img", this).fadeToggle();
);

此外,如果您想防止歇斯底里的用户看到动画堆积,您可以添加.stop() 方法,例如:

$('.video').hover(function()
  $("img", this).stop().fadeToggle();
);

此外,我提供的 HTML 也可以仅使用 CSS 完成:http://jsbin.com/amiBOKu/4/edit

.video:hover > img
    display:none;

【讨论】:

这是我用过的唯一一个 'span' 实例。这是一个很小的 ​​html 文件。 @JonathanOsborn 添加了一个例子【参考方案5】:

我建议进行一些重组,以及使用hover 而不是mouseovermouseout。您看到闪烁的原因是因为 mouseout 会在图像消失后触发,而 hover 只会在鼠标移入和鼠标移出时触发一次。

例子:

HTML:

<div class = "vine-two media">
    <img class = "on-top picture" src = "http://data2.whicdn.com/images/27599232/kanye-west-announces-new-design-company-called-donda-1_large.jpg">
    <iframe id = "video" class="vine-embed adj-size"src="https://vine.co/v/bYDuAmjeH9r/embed/simple"frameborder="0"></iframe><script async src="//platform.vine.co/static/scripts/embed.js" charset="utf-8"></script>
</div>

JS:

$('.media').hover(function() 
    // mouse enter
    $('.picture', this).hide();
, function() 
    // mouse leave
    $('.picture', this).show();
);

Fiddle

【讨论】:

HTML 元素定位错误(意味着使用了不需要的z-index$(this) 的错误使用,以及hover() 的冗长使用to toggle child 方法。 HTML 是对 OP 的修改,CSS 是从 OP 复制/粘贴的,$(this) 是有效的,并且详细使用悬停和显示/隐藏在哪里模仿代码OP。我试图向 OP 展示他如何修改他的代码以一种可以理解的方式工作,而不是完全改变它。 比你不明白 jQuery 中 this 引用的确切用法。 Than 您应该解释为什么它是错误的,而不是对有效答案投反对票并留下无用的尖酸评论? 你还没有解释为什么使用$(this) 是错误的而不是this

以上是关于悬停时jQuery图像闪烁的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 变换比例图像错误。使用悬停变换过渡时,图像会闪烁自身的一个小版本

有条件渲染图像时 React 中的图像闪烁问题

Jquery - 为啥我的图像不会在鼠标悬停时动画?

悬停时的图像动画jquery

使用jQuery单击时保持图像悬停按钮

用 jquery 替换悬停时的图像:定位问题