【问题标题】:Replacing MouseOver with .hoverIntent用 .hoverIntent 替换 MouseOver
【发布时间】:2010-02-10 20:26:01
【问题描述】:

首先我很抱歉......我之前已经发布过这个问题,但我没有很好地解释它。我无法将 hoverIntent 插入以下 JavaScript... 我需要它来替换下面的 mouseentermouseleave 函数。为了清楚起见,我正在寻求帮助,因为我对 JavaScript 语法不是很好。下面的第二个代码 sn-p 似乎应该可以工作,但它什么也没做,而且在 Internet Explorer 中似乎完全死了。

if (jQuery.browser.msie === true) {
  jQuery('#top_mailing')
    .bind("mouseenter",function(){
      $("#top_mailing_hidden").stop().slideDown('slow');
    })
    .bind("mouseleave",function(){
      $("#top_mailing_hidden").stop().slideUp('slow');
    });
}

我将以下内容用于其他浏览器,但它在 Internet Explorer 中不起作用。

$('#top_mailing').hoverIntent(
  function () {
    $("#top_mailing_hidden").stop().slideDown('slow');
  }, 
  function () {
    $("#top_mailing_hidden").stop().slideUp('slow');
  }
);

【问题讨论】:

  • 您在 IE 中遇到任何 JS 错误吗?
  • 刚刚用 IE 测试了 hoverIntent 和 jQuery 1.4.1。工作正常。它对你有动画吗?是否可以在其他浏览器中使用?
  • 你测试过这段代码了吗: $('#top_mailing').hoverIntent( function () { $("#top_mailing_hidden").stop().slideDown('slow'); }, function () { $("#top_mailing_hidden").stop().slideUp('slow'); } );
  • 复制粘贴。工作正常。它对你有动画吗?它在其他浏览器中工作吗?你用 hover() 试过了吗?能否请您包含 top_mailing 和 top_mailing_hidden 的 CSS?
  • 在所有其他浏览器中都能正常工作。当我去掉 IE 的条件动画并只留下上面的代码时,它就死了。根本没有动画。

标签: javascript jquery debugging internet-explorer-7 hoverintent


【解决方案1】:

我想我找到了问题。

您拨打了两次$('#top_mailing').hoverIntent(...。一次在 hoverintent_r5.js 文件的底部,一次在您的 custom.js 文件中。显然 IE 不喜欢这样。摆脱一个或另一个,它应该没问题。

最好将所有代码保存在自己的 js 文件中。否则很容易忘记。

编辑:避免 stop() 问题。

我更喜欢动画:

$('#top_mailing').hoverIntent(
  function () {
    $("#top_mailing_hidden").stop().animate({height:150},'slow');
  }, 
  function () {
    $("#top_mailing_hidden").stop().animate({height:0},'slow');
  }
);

这样,当你需要停下来改变方向时,它总能知道去哪里。 (上例中为 0 和 150。)

请注意,这需要 top_mailing_hidden 设置 clip:auto; overflow:hidden

由于您正在使用 hoverIntent,因此可能不需要调用 stop(),因为 hoverIntent 旨在避免那些意外的鼠标悬停事件。

题外话:

在实施时请记住一件事。由于这是要填写的表格,因此用户可能会(甚至不假思索地)在开始输入时将鼠标移开。这将导致表单消失。

考虑到这一点,您可能需要重新考虑执行 mouseout 事件。当用户提交表单时,您始终可以使用可选的“取消”或“关闭”按钮将其向后滑动。

【讨论】:

  • 太棒了!由于您正在查看实际站点...试试这个 - 如果您将鼠标悬停在下拉菜单上然后鼠标悬停。现在在 slideUp 动画完成时快速进出鼠标。您应该看到它在动画中途被捕获的地方中止,然后再次将鼠标悬停在它上面,它不会下降或只下降一部分。这就是我试图用 .stop() 和 .dequeue() 命令解决的问题,但这仍然是一个问题。有什么想法吗?
  • 很高兴它正在工作。关于新问题,我注意到在使用上滑/下滑或其他类似功能时,如果您调用 stop(),它可能会丢失正确的目的地。我个人不会使用这些。相反,我会使用 jQuery 的 animate() 方法。这样,您就可以对目的地进行硬编码。我将编辑我的答案以向您展示我的意思。
  • 哈哈! .animate 函数比 slideDown 更容易出错。你可以在网站上看到它。
  • 奇怪。动画应该可以工作。可能部分是因为您没有在#top_mailing_hidden 元素上设置clip:auto; overflow:hidden。无论哪种方式,如果您要使用“hoverIntent”,我都会放弃“mouseout”事件,并摆脱 stop()。
  • 完美!是的,对于 hoverIntent.js,stop() 不是必需的!非常感谢!
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
相关资源
最近更新 更多