2

如果我有一个像这样带有默认 css 的按钮,我该如何制作它,当您单击按钮时,文本会发生变化并且它的宽度会被动画化以适应新文本?

HTML

<button>Click Me</button>

jQuery

$(document).on("click", "button", function(){

    $(this).text("You have clicked me!", function(){
        $(this).animate({width:"auto"}, 1000);
    });

})

jsFiddle

http://jsfiddle.net/HYZbA/41/

4

4 回答 4

2

这是一个可行的示例,您需要稍微玩一下 http://jsfiddle.net/HYZbA/47/

但正如 Tomzan 所说,不可能将宽度设置为自动,因此该示例使用了解决方法。

我先固定宽度,然后更改文本和动画,这可以防止按钮自己做自动宽度。

$("button").bind("click", function(e){
$(this).css("width", $(this).width());
$(this).text("test test test test test test test");
$(this).animateAuto("width", 1000); 
于 2013-08-28T13:42:21.583 回答
2
$("button").click(function () {
    var oldWidth = $(this).width();
    $(this).text("stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff stuff");
    var newWidth = $(this).outerWidth();
    $(this).width(oldWidth);
    $("button").animate({
        width: newWidth + 'px'
    }, 1000);
})

jsFiddle 示例

于 2013-08-28T13:45:52.247 回答
1

你可以试试:

$("button").click(function(){
    var widthOld = $(this).width();
    $(this).text("You have clicked me!");
    var widthNew = $(this).width();
    $(this).animate({width: widthOld+'px'},0).animate({width:widthNew+"px"}, 1000,
       function() {$(this).css('width', 'auto');}
    ); 
});
于 2013-08-28T13:41:41.673 回答
1

您不能将宽度/高度设置为自动,

相反,您自动提供一个不可见的相似元素宽度/高度并保存其计算值,然后使用计算值为您自己的元素设置动画。

这是一个解释如何做到这一点的链接。

于 2013-08-28T13:39:31.007 回答