【问题标题】:Changing div background image on mouseover & click in a separate location在鼠标悬停时更改 div 背景图像并单击单独的位置
【发布时间】:2012-06-06 13:45:22
【问题描述】:

我目前正在尝试将鼠标悬停在背景图片上并在单独的 div 中查看新图片。哪个有效(使用下面的代码),但是单击图像时我似乎无法更改它。下面是代表我要完成的工作的图像。

1 http://pkg.madisonmottdev.com/images/1.png

悬停或点击时(2 楼相同) 2 http://pkg.madisonmottdev.com/images/2.png

当前用于悬停的Javascript代码,可以正常工作。我只是不知道如何单击(一楼或二楼并在右侧更改)。任何帮助表示赞赏。

 $(window).load(function(){
        $(document).ready(function(){
            // FIRST FLOOR
            $('.floor1').mouseover(function(){
                $('.floor1').css('background', 'url("images/phase-2/first-floor-hover.a.png") no-repeat');
                $('#elevation').css('background', 'url("images/phase-2/first-floor-lg.a.png") no-repeat');
            });
            $('.floor1').mouseout(function(){
                $('.floor1').css('background', 'url("images/phase-2/first-floor.a.png") no-repeat');
                $('#elevation').css('background', 'url("images/phase-2/elevation.a.png") no-repeat');
            });

             // SECOND FLOOR
            $('.floor2').mouseover(function(){
                $('.floor2').css('background', 'url("images/phase-2/second-floor-hover.a.png") no-repeat');
                $('#elevation').css('background', 'url("images/phase-2/second-floor-lg.a.png") no-repeat');
            });
            $('.floor2').mouseout(function(){
                $('.floor2').css('background', 'url("images/phase-2/second-floor.a.png") no-repeat');
                $('#elevation').css('background', 'url("images/phase-2/elevation.a.png") no-repeat');
            });

        });
    });  

HTML 代码(地板 1、地板 2 和高程设置为具有高度/宽度的背景图像):

        <div id="building">
                <div id="floor">
                  <div class="floor1"></div>
                </div>

                <div id="floor">
                  <div class="floor2"></div>
                </div>
        </div>

【问题讨论】:

  • 你能设置一个测试用例来显示问题吗?最好在jsfiddle.net?
  • 另外,您的点击事件函数不起作用也很高兴看到。
  • 您想要的行为似乎有点奇怪,因为鼠标悬停事件总是在用户有机会点击图像之前发生。
  • 嗨,事实-我想完全做到这一点jsfiddle.net/neo108/fCsNN,但我想添加一个功能,您单击其中一个框,它会一直存在,直到您单击另一个框
  • 查看我编辑的答案以实现您在上述评论中的要求 - 请注意,您需要删除 mouseout() 位,否则背景图像将不会“停留”

标签: javascript html css click mouseover


【解决方案1】:

你追求的是这样的东西吗?

http://jsfiddle.net/98wuW/19/

诀窍在于,如果您单击了 floor1,则 floor1.mouseout 无法删除 #elevation 中的 floor1 图像。

就目前而言,您可以使用 floor1.mouseout 将#elevation 的背景图像更改回默认值。因此,假设您将鼠标悬停在 floor1 上。然后将鼠标移离 floor1。然后 floor1.mouseout 会将#elevation 的背景图像设置回默认值。

诀窍在于,当您单击 floor1 时,您必须设置一个标志或其他内容,上面写着“将 floor1 图像保留在 #elevation 中”。然后在 mouseout 中,您可以检查该标志以查看是否可以删除#elevation 中的地板图像。

你的例子有点棘手,因为你有两层楼,这两层都可以点击,所以你必须在每次鼠标移出时检查两个标志。

【讨论】:

    【解决方案2】:

    当您单击时没有任何反应,因为您没有任何侦听器绑定到单击事件。

    尝试将部分代码更改为:

        // FIRST FLOOR
        $('.floor1').click(function(){
            $('.floor1').css('background', 'url("images/phase-2/first-floor-hover.a.png") no-repeat');
            $('#elevation').css('background', 'url("images/phase-2/first-floor-lg.a.png") no-repeat');
        });
        $('.floor1').mouseout(function(){
            $('.floor1').css('background', 'url("images/phase-2/first-floor.a.png") no-repeat');
            $('#elevation').css('background', 'url("images/phase-2/elevation.a.png") no-repeat');
        });
    

    你会看到行为上的不同——我已经从 mouseover 更改为 click 事件。

    您可以像这样将多个事件绑定到同一个侦听器:

    $('.floor1').bind('click mouseover', function() {...});

    编辑

    根据您的最后一条评论,请参阅此小提琴以实现您的要求:

    http://jsfiddle.net/BzPdB/

    【讨论】:

    • 是的,我知道没有电话,我之前尝试过类似的方法,但没有成功。
    • 你认为这可能是因为它们是背景图片而不是按钮或链接?
    • 背景图片只是 css 样式 - 它们与 DOM 元素无关。您正在监听 .floor1 类的 DOM 元素上的“点击”事件,这与 css 样式无关 - jQuery 允许您监听任何类型的 DOM 元素上的事件,无论它们是什么(按钮、链接或 div)
    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2010-11-25
    相关资源
    最近更新 更多