【问题标题】:Possible to fade out div border?可以淡出div边框吗?
【发布时间】:2011-10-25 05:25:40
【问题描述】:

我知道您可以使用 jQuery 淡出 <div>,但我想知道是否可以淡出 <div> 的边框?

所以我有我的<div>

<div class="confession" style="border:3px solid #DDD;">
</div>

我只是想知道如何让边框在 5 秒后淡出。


更新

任何仍想这样做的人都可以使用 CSS3 过渡来做到这一点。
请务必检查它是否在您支持的浏览器功能范围内:http://caniuse.com/#search=transition

例子

div {
    border: 4px solid red;
    -webkit-transition: border-color .25s ease;
       -moz-transition: border-color .25s ease;
        -ms-transition: border-color .25s ease;
         -o-transition: border-color .25s ease;
            transition: border-color .25s ease;
}

div:hover {
    border-color: none;
}

【问题讨论】:

    标签: javascript jquery css animation


    【解决方案1】:

    您需要为此使用 jQuery UI(彩色动画):

    $(".confession").animate({
       borderLeftColor: "white",
       borderTopColor: "white",
       borderRightColor: "white",
       borderBottomColor: "white",
    }, 3000);
    

    (它不适用于borderColor,至于“透明”它会逐渐变为白色)

    http://jsfiddle.net/Jacek_FH/kxCht/3/

    具有类似(相同?)功能的插件:

    http://docs.jquery.com/Release:jQuery_1.2/Effects#Color_Animations

    【讨论】:

    • 如果他的背景不是白色的,如果是透明的呢?
    • 我不确定jQuery UI是否处理rgba(),你需要自己检查一下
    • 为什么需要 jQuery UIjQuery animate()不能一个人做吗?
    • 这与持续时间无关 - jQueryUI 仅分别处理所有 4 个边框
    • 即使这样,它仍然无法处理图像背景。当背景不同时,这将导致它褪色为白色。
    【解决方案2】:

    真正的淡出动画需要我们使用 Alpha 通道。 AFAIK jQuery UI 对rgba() 的使用非常错误,所以我们可以使用step 属性来改变边框的不透明度,如下所示:

    setTimeout(function(){
    
        var div = $('.confession');
        $({alpha:1}).animate({alpha:0}, {
            duration: 1000,
            step: function(){
                div.css('border-color','rgba(0,0,0,'+this.alpha+')');
            }
        });
    
    }, 5000);
    

    我使用了黑色边框,因此您可以注意到效果,但您可以将其更改为您想要的任何颜色,例如rgba(221,221,221,'+this.alpha+')');#DDD

    工作示例:http://jsfiddle.net/victmo/2Xazx/

    干杯!

    顺便说一句,这种方法不需要插件...

    【讨论】:

    • 我查看了您提供的 JSFiddle 链接,但它似乎不起作用:/
    • 我相信旧版本的 IE 无法处理 rgba 属性。你在哪个浏览器上测试过?
    • 我刚刚更新了示例以在 5 秒后自动淡化边框,而不必单击正方形
    • 好的,我刚刚在 IE9、FF4 和 Chrome13 上再次测试了该示例,它可以正常工作:)
    • 抱歉昨天没有回复:) 没有在线。感谢您所做的一切,一切正常! :)
    【解决方案3】:

    我更喜欢我的方式... >.> 不需要插件。

    http://jsfiddle.net/MJD5B/2

    <div class="confession" style="margin:3px;position:relative">
        text
        <div class="fakeBorder"></div>
    </div>
    


    .fakeBorder
    {
        position:absolute;
        height:100%;
        width:100%;
        left:0px;
        top:0px;
        border:3px solid #DDD;
        margin:-3px;
    }
    

    【讨论】:

    • 我也是这样,只需在里面添加一个绝对定位的元素,然后将其淡出 - 纯 jQuery :)
    【解决方案4】:

    恐怕没有一种 100% 干净的工作方式可以做到这一点。

    • 您可以为边框宽度设置动画,但这不会“淡出”。
    • 您可以为边框颜色设置动画,但这需要在 jQuery 之上添加一个额外的库,而且如果您更改背景,它会中断。
    • 您可以通过将 2 个 div 彼此叠放并留出一小块空间来伪造边框,然后将外面的 div 淡出,但这并不是真正的边框,如果您想要一些花哨的东西,例如 @987654321 @或dotted边框,不会那么简单。

    如果您不打算拥有比简单的实心边框更花哨的东西,我建议使用 jQuery 生成 2 div 解决方案,然后淡出外部(边框)div。就像乔伊在我上面的回答一样。

    【讨论】:

      【解决方案5】:

      以下解决方案应满足您发布的所有标准:

      等待 5000 毫秒(5 秒),然后制作一个持续 500 毫秒(0.5 秒)的淡出边界动画。

      $(".confession").delay(5000).animate({borderWidth: "0"}, 500);
      

      工作示例:http://jsfiddle.net/ECRLW/

      由于上述解决方案似乎无法使用某些浏览器为边框宽度渐变设置动画,我知道如何使用 jQuery 完成您想要的唯一方法是使用 setTimeout():

      function shrinkBorder(){
          var e = $(".confession");
          var eBorderWidth = e.css("border-width");
          if(eBorderWidth != "0px"){
              e.css("border-width",(eBorderWidth.split("px")[0]-1));
              setTimeout(shrinkBorder, 50);
          }
      }
      
      setTimeout(shrinkBorder, 5000);
      

      工作示例:http://jsfiddle.net/mmfMG/

      【讨论】:

      • 使用你的 JSFiddle,在 Safari 中,边框会弹出......无论我设置多长时间都不会褪色。
      • 这是唯一对我有用的,虽然就像 Sparky 说的(但是我在 Firefox 上)它只是消失了,没有褪色。
      • 是的,详细说明一下。边框确实消失了,但不会褪色:)
      • @Richard & RobB:新示例在 Safari 中仍然无法运行...不会褪色也不会消失。
      猜你喜欢
      • 1970-01-01
      • 2011-12-02
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2022-06-30
      相关资源
      最近更新 更多