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

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


当前回答

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

其他回答

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

让CSS在你的div上勾勒出你需要的一切减去背景规则,然后添加两个类(例如:扩展和折叠)作为规则,每个规则都具有正确的背景图像(或背景位置,如果使用精灵)。

不同图片的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;}

或CSS与图像精灵

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

.expanded {background-position: left bottom;}

然后……

带有图像的JavaScript代码

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

JavaScript与精灵

注意:优雅的toggleClass在ie6中不起作用,但是下面的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');
            }
        });
    }

据我所知,这种方法可以跨浏览器工作,而且比起在脚本中修改URL,我更喜欢使用CSS和类。

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

CSS精灵效果最好。我尝试切换类和使用jQuery操纵'background-image'属性,没有工作。我认为这是因为浏览器(至少是最新的稳定Chrome)不能“重新加载”已经加载的图像。

好处:CSS精灵下载和显示速度更快。更少的HTTP请求意味着更快的页面加载。减少HTTP的数量是提高前端性能的最佳方法,所以我建议一直走这条路。

一种方法是把两个图像放在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>
$('#divID').css("background-image", "url(/myimage.jpg)");  

应该这样做,只是在元素上的点击事件中连接它吗

$('#divID').click(function()
{
  // do my image switching logic here.
});