【问题标题】:Cons of MouseOver for webpages网页鼠标悬停的缺点
【发布时间】:2013-05-14 17:15:37
【问题描述】:

所以我目前正在创建一个“按钮”,其中包含多个图像,就像幻灯片一样,每当我将鼠标悬停在它上面时,图像就会变成另一个图像。

但是,只要幻灯片图像发生变化,MouseOver 效果就会被移除为 MouseOut 状态,因为从技术上讲,鼠标不再位于图像上。

我也尝试为我的按钮设置淡入淡出效果,但是我的大多数搜索导致使用悬停功能而不是 MouseOver 和 MouseOut。

所以我想知道 Hover 在潜在功能方面是否比 MouseOver 更好?

是否可以在悬停等时暂停幻灯片事件?我该怎么做呢?

这是我当前的代码:

function.js

$(function () {

    $('#01 img:gt(0)').hide();
    setInterval(function () {
        $('#01 :first-child').fadeOut(1500)
           .next('img').fadeIn(1500)
           .end().appendTo('#01');
    },
      3000);
});

$(document).ready(function () {

    $("#image1").mouseover(function () {
        $(this).attr("src", "images/board_01_over.jpg");
    });

    $("#image1").mouseout(function () {
        $(this).attr("src", "images/board_01_01.jpg");
    });
});

ma​​in.css

    #board {
    float: left;
    width: 998px;
    overflow: hidden;
}


.fadein {

    float: left;
    position: relative;
    width: 240px;
    height: 140px;
    margin: 1px 1px 1px 1px;
}

    .fadein img {
        position: absolute;
        left: 0;
        top: 0;
        height: 140px;
        opacity: 0.6;
        overflow: hidden;
    }

        .fadein img:hover {
            opacity: 1;
        }

Main.html

     <div id="board">
         <div class="fadein" id="01">
             <img src="images/board_01_01" id="image1" />

             <img src="images/board_01_02.jpg" id="image2" />
         </div>

     </div>

【问题讨论】:

  • 在 mouseenter 时取消计时器,在 mouseleave 时重新启动计时器。
  • 两件事:jQuery 的悬停与做 mouseenter 和 mouseleave 是一样的。您可以使用.fadein:hover img 或其他变体吗? $(function () {$(document).ready(function () { 相同,因此您可以将其折叠成一个块。
  • @epascarello 如果我使用悬停功能而不是 mouseover/mouseout 会怎样?

标签: javascript jquery html css hover


【解决方案1】:

由于您使用的是 jQuery,因此您可以使用 hover() 函数。

http://api.jquery.com/hover

$("#image1").hover(function () {
    $(this).attr("src", "images/board_01_over.jpg");
},

function () {
    $(this).attr("src", "images/board_01_01.jpg");
});

对于你的滑块来说,用它制作一个小对象更容易,因此更容易控制。

var Slideshow = {
    interval:null,

    start: function () {
        ...
        initialize
        ...
        // catch the interval ID so you can stop it later on
        this.interval = window.setInterval(this.next, 3000);
    },

    next: function () {
        /*
         * You cannot refer to the keyword this in this function
         * since it gets executed outside the object's context.
         */
        ...
        your logic
        ...
    },

    stop: function () {
        window.clearInterval(this.interval);
    }
};

现在您可以轻松调用

Slideshow.start();
Slideshow.stop();

从任何地方开始和停止您的滑块。

【讨论】:

  • 它有效。但是,如何在悬停时暂停我的幻灯片事件呢?我该怎么做?
  • 我可以参考一个示例来禁用/暂停任何类型的事件吗?目前我只想暂停 Hover 上特定 div 的幻灯片事件,但是我不知道该怎么做?一个例子将不胜感激。
  • 请为slideshow 使用简单的对象字面量。您当前的代码不起作用。不要使用类似构造函数的方法。
  • @Bergi 是的,忘记了前面的 new 运算符。但是文字是更好的方法。感谢您指出。
猜你喜欢
  • 2011-08-04
  • 2018-09-03
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2011-05-26
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多