我正在为我工作的公司制作一个扩展/崩溃电话费率表。我目前有一个表下面有一个按钮来展开它,按钮说“展开”。它是功能性的,除了我需要按钮改变为“折叠”时,它被点击,然后当然回到“展开”时,再次点击。按钮上的文字是背景图像。

所以基本上我所需要的是改变一个div的背景图像时,它被点击,除了有点像一个切换。


当前回答

一种方法是把两个图像放在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>

其他回答

这适用于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>

我使用正则表达式,因为我想保留一个相对路径,而不使用添加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);
                }
            }
        );

我在一个论坛上找到了一个解决方案,切换背景Img。

如果你为背景图像使用CSS精灵,你可以根据你是在展开还是折叠背景偏移+/- n个像素。不是切换,但比切换背景图像url更接近切换。

我总是使用时间戳来防止浏览器缓存图像。例如,如果用户正在旋转他们的头像,它通常会被缓存并且看起来没有改变。

var d = new Date();
var t = d.getTime();

$('#avatar').css("background-image", "url(" + iPath + "?" + t + ")");