使用jQuery切换DIV背景图像

zuk*_*uk1 200 jquery

我正在为我工​​作的公司制作扩展/折叠通话费率表.我目前有一个桌子,下面有一个按钮来展开它,按钮显示"展开".它是有用的,除了我需要按钮在单击时更改为"折叠",然后当再次单击时更改为"展开".按钮上的书写是背景图像.

所以我基本上只需要在点击时更改div的背景图像,除了类似切换之外.

Nic*_*ick 433

$('#divID').css("background-image", "url(/myimage.jpg)");  
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩,只需在元素上的单击事件中将其挂钩

$('#divID').click(function()
{
  // do my image switching logic here.
});
Run Code Online (Sandbox Code Playgroud)


小智 61

我个人只会使用JavaScript代码在两个类之间切换.

让CSS概述你在div上需要的一切MINUS背景规则,然后添加两个类(例如:展开和折叠)作为规则,每个类具有正确的背景图像(或者如果使用精灵,则为背景位置).

CSS与不同的图像

.div {
    /* button size etc properties */
}

.expanded {background: url(img/x.gif) no-repeat left top;}
.collapsed {background: url(img/y.gif) no-repeat left top;}
Run Code Online (Sandbox Code Playgroud)

或者带有图像精灵的CSS

.div {
    background: url(img/sprite.gif) no-repeat left top;
    /* Other styles */
}

.expanded {background-position: left bottom;}
Run Code Online (Sandbox Code Playgroud)

然后...

带图像的JavaScript代码

$(function){
    $('#button').click(function(){
        if($(this).hasClass('expanded'))
        {
            $(this).addClass('collapsed').removeClass('expanded');
        }
        else
        {
            $(this).addClass('expanded').removeClass('collapsed');
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

带精灵的JavaScript

注意:优雅的toggleClass在Internet Explorer 6中不起作用,但下面的addClass/ removeClass方法在这种情况下也能正常工作

最优雅的解决方案(遗憾的是Internet Explorer 6不友好)

$(function){
        $('#button').click(function(){
            $(this).toggleClass('expanded');
        });
    }

$(function){
        $('#button').click(function(){
            if($(this).hasClass('expanded'))
            {
                $(this).removeClass('expanded');
            }
            else
            {
                $(this).addClass('expanded');
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

据我所知,这种方法适用于浏览器,我觉得使用CSS和类比使用脚本中的URL更改更舒服.


Ecr*_*lis 42

使用jQuery更改背景图像CSS有两种不同的方法.

  1. $('selector').css('backgroundImage','url(images/example.jpg)');
  2. $('selector').css({'background-image':'url(images/example.jpg)'});

仔细看看差异.在第二种情况下,您可以将常规CSS和多个CSS属性串联起来.

  • 2.不正确无效.将多个属性串在一起就像这样:$('selector').css({'background-color':'yellow','background-image':'url()'}) (6认同)

Dav*_*ard 17

如果对背景图像使用CSS精灵,则可以根据您是在展开还是折叠来碰撞背景偏移+/- n像素.不是切换,而是比切换背景图像URL更接近它.

  • 奖励:如果您只使用单独的图像,则实际加载了加载时显示的图像.在加载第二个状态之前切换图像时会有一个小的延迟.使用精灵,你只有一个图像,它已经存在. (2认同)

Lou*_*pax 14

我是这样做的:

CSS

#button{
   background-image: url("initial_image.png");
}

#button.toggled{
  background-image:url("toggled_image.png");
}
Run Code Online (Sandbox Code Playgroud)

JS

$('#button').click(function(){
  $('#my_content').toggle();
  $(this).toggleClass('toggled');
});
Run Code Online (Sandbox Code Playgroud)


ale*_*206 10

一种方法是将两个图像放在HTML中,在SPAN或DIV中,您可以使用CSS或在页面加载时使用JS隐藏默认值.然后你可以切换点击.这是我用来在列表中放置左/下图标的类似示例:

$(document).ready(function(){
    $(".button").click(function () {
        $(this).children(".arrow").toggle();
            return false;
    });
});

<a href="#" class="button">
    <span class="arrow">
        <img src="/images/icons/left.png" alt="+" />
    </span>
    <span class="arrow" style="display: none;">
        <img src="/images/down.png" alt="-" />
    </span>
</a>
Run Code Online (Sandbox Code Playgroud)


eno*_*rev 5

这适用于WinXP上的所有当前浏览器.基本上只是检查当前的背景图像是什么.如果是image1,则显示image2,否则显示image1.

jsapi的东西只是从谷歌CDN加载jQuery(更容易测试桌面上的misc文件).

替换是针对跨浏览器兼容性(opera和ie添加引号到url和firefox,chrome和safari删除引号).

<html>
    <head>
        <script src="http://www.google.com/jsapi"></script>
        <script>
          google.load("jquery", "1.2.6");
          google.setOnLoadCallback(function() {
            var original_image = 'url(http://stackoverflow.com/Content/img/wmd/link.png)';
            var second_image = 'url(http://stackoverflow.com/Content/img/wmd/code.png)';

            $('.mydiv').click(function() {
                if ($(this).css('background-image').replace(/"/g, '') == original_image) {
                    $(this).css('background-image', second_image);
                } else {
                    $(this).css('background-image', original_image);
                }

                return false;
            });
          });
        </script>

        <style>
            .mydiv {
                background-image: url('http://stackoverflow.com/Content/img/wmd/link.png');
                width: 100px;
                height: 100px;
            }
        </style>
    </head>
    <body>
        <div class="mydiv">&nbsp;</div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 对于面向公众的网站,最好从Google加载.Google的CDN很可能比您的网站更快,允许它与您网站上的其他内容并行下载,使用它的网站越多,使用该用户浏览器的缓存副本的可能性就越大. (20认同)
  • 如果谷歌倒下,我还活着; 让我知道. (2认同)
  • @Nick问题应该是,为什么*不会*你想要加载,如果关闭谷歌.:-) (2认同)

小智 5

我使用正则表达式做了我的,因为我想保留一个相对路径而不是使用 addClass 函数。我只是想让它变得复杂,哈哈。

$(".travelinfo-btn").click(
            function() {
                $("html, body").animate({scrollTop: $(this).offset().top}, 200);
                var bgImg = $(this).css('background-image')
                var bgPath = bgImg.substr(0, bgImg.lastIndexOf('/')+1)
                if(bgImg.match(/collapse/)) {
                    $(this).stop().css('background-image', bgImg.replace(/collapse/,'expand'));
                    $(this).next(".travelinfo-item").stop().slideToggle(400);
                } else {
                    $(this).stop().css('background-image', bgImg.replace(/expand/,'collapse'));
                    $(this).next(".travelinfo-item").stop().slideToggle(400);
                }
            }
        );
Run Code Online (Sandbox Code Playgroud)


yPh*_*hil 5

我的动画:

$(this).animate({
    opacity: 0
}, 100, function() {
    // Callback
    $(this).css("background-image", "url(" + new_img + ")").promise().done(function(){
        // Callback of the callback :)
        $(this).animate({
            opacity: 1
        }, 600)
    });    
});
Run Code Online (Sandbox Code Playgroud)