3

是否可以使用 jQuery来-webkit-transition:opacity .5s linear;切换元素的不透明度(以便您可以通过displaydisplay:blockdisplay:none

例如:您单击一个<a>标签,该标签通过将其不透明度设置为 1 并设置来显示一个 div display:block。然后再次单击<a>标签,它将不透明度设置为 0,然后将显示设置为none

我的尝试如下:

.visible{
    opacity: 1;
    -webkit-transition:opacity .5s linear;
    display: block;
}

.close{
    display: none;
    opacity:0;
    width:20px;
    height:20px;
    background-color:red;   
    -webkit-transition:opacity .5s linear;
}

$(".toggle").click(function(){
if ($(".close").css("display") === "none") {
    $(".close").addClass("visible").delay(500).promise().done(function () {
        $(this).css("display", "block");
    });
};
if ($(".close").css("display") === "block") {
    $(".close").removeClass("visible").delay(500).promise().done(function () {
        $(this).css("display", "none");
    });
};
});

http://jsfiddle.net/charlescarver/zzP6g/

4

3 回答 3

2

这似乎是重复的:显示器上的转换:属性
这个问题非常相似,应该会导致您得出相同的结论。

最好的祝愿,
科尔文

于 2012-09-19T03:26:22.480 回答
2

文档的这个特定页面很有帮助:

transition-property – 应该为什么属性设置动画,例如不透明度。

transition-duration – 过渡应该持续多长时间。

transition-timing-function – 过渡的计时函数(例如,线性与缓入与自定义三次贝塞尔函数)。

过渡——所有三个属性的简写。

因此,您可以调用特定属性,例如opacity,也可以all在类名中使用。我认为后者可能更有用,即使您只有一个属性要应用。

基本上,您可以将 aclassall转换属性一起使用并切换类名。我发现有趣的一件事是,您实际上可以在classadd 上执行多个版本(不过,在删除类时会出现不完全相同的效果)。此外,据我所知,opacitywidthand结合height使用会比使用更好。display: none

下面演示了如何-webkit-transition在图层中使用该属性。这是一个简化版本,后面是更复杂的演示:

#block.transition让我区分一下我的过渡属性:

<div id="block" class="transition"></div>

基本属性,非动画:

#block {
    margin: 25px auto;
    background: red;
}

最初的“看不见”状态:

#block.transition {
    opacity: 0;  
    width: 0;
    height: 0;
    padding: 0;
    -webkit-transition: all 2s ease-in-out; 
}

和动画步骤:

#block.transition.show {
    opacity: .3;
    width: 50px;
    height: 50px;
    background: orange;
    -webkit-transition: all .5s ease-in-out; 
}
#block.transition.show {
    opacity: .4;
    width: 150px;
    height: 150px;
    background: black;
    -webkit-transition: all 1s ease-in-out; 
}
#block.transition.show {
    opacity: 1;  
    padding: 100px;
    background: blue;
    -webkit-transition: all 3s ease-in-out; 
}​

请注意,我在这里所做的只是切换.show课程:

$(document).ready(function load(){
    var $block = $("#block");

    $('.toggle').click(function c(){
        $block.toggleClass('show');
    });
});​

演示来源


标记

<p><button class="toggle">Toggle Blocks</button></p>

<div id="block" class="transition">
    <div class="blocks transition"></div>
    <div class="blocks transition"></div>
    <div class="blocks transition"></div>
</div>

​<strong>CSS

包含#block

#block {
    margin: 25px auto;
    background: #333;
    -webkit-transition: opacity, display, width 1.5s ease-in-out; 
}
#block.transition {
    opacity: 0;  
    width: 0;
    padding: 0;
    border: 1px solid yellow;
    -webkit-transition: all 1.9s ease-in-out; 
}
#block.transition.show {
    opacity: .3;  
    border-color: blue;
    -webkit-transition: all .5s ease-in-out; 
}
#block.transition.show {
    opacity: 1;  
    width: 550px;
    padding: 25px;
    border-width: 15px;
    -webkit-transition: all 3s ease-in-out; 
}

三人组.blocks

.blocks {
    display: inline-block;
    background-color: red;
}
.blocks.transition {
    opacity: .1; 
    width: 0;
    height: 0;
    margin: 0; 
    -webkit-transition: all 1.7s ease-in-out; 
}
.blocks.transition.show {
    opacity: 1;
    width: 150px;
    height: 150px;
    margin: 10px;
    -webkit-transition: all 4.5s ease-in-out;
}​

jQuery

$(document).ready(function load(){
    var $block = $("#block"),
        $blocks = $block.find(".blocks.transition");

    $('.toggle').click(function c(){
        $block.toggleClass('show');

        $blocks.delay(1500).toggleClass('show');
    });
});​

演示来源

于 2012-09-19T05:56:06.383 回答
1

为什么不向 CSS3 过渡结束事件添加事件侦听器,当事件触发时,您可以隐藏或显示元素。

$('.close').on('transitionend webkitAnimationEnd MozTransition OTransitionEnd MSTransitionEnd', function () {
    $(this).show();
});

使用此解决方案,您可以删除单击事件中将 css 属性显示设置为阻塞或无的设置,并在 transitionend 事件处理程序中进行处理。

如果您需要更详细的示例,我很乐意提供。这显然只是让您朝着正确方向前进的起点。

完整示例:

$('.close').on('transitionend webkitAnimationEnd MozTransition OTransitionEnd MSTransitionEnd', function () {
    if (!$(this).hasClass('visible')) {
        $(this).css('display', 'none');
    } else {
        $(this).css('display', 'block');
    }
});

$(".toggle").click(function(){
    if ($(".close").is(':hidden')) {
        $(this).css('display', 'block');
        $(".close").addClass("visible");
    } else {           
        $(".close").removeClass("visible");
    }
});​
于 2012-09-19T03:33:14.483 回答