亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用CSS(和JavaScript?)創建模糊的“磨砂”背景?

如何使用CSS(和JavaScript?)創建模糊的“磨砂”背景?

三國紛爭 2019-11-27 11:15:06
我正在嘗試使用HTML5,CSS3和JavaScript創建可在Webkit瀏覽器上使用的iOS 7樣式磨砂外觀。從技術上講,給出以下HTML:<style>  #partial-overlay {    width: 100%;    height: 20px;    background: rgba(255, 255, 255, .2); /* TODO frost */    position: fixed;    top: 0;    left: 0;  }</style><div id="main-view">  <div style="width: 50px; height: 50px; background: #f00"></div>  To my left is a red box<br>  Now there is just text<br>  Text that goes on for a few pixels <br>  or even more</div><div id="partial-overlay">  Here is some content</div>我想-webkit-filter: blur(5px)對的第一個20px水平應用類似a 的內容#main-view。如果將CSS修改為,#partial-overlay { width: 20px; height: 100%; ...}則需要將其-webkit-filter: blur(5px)垂直應用于前20px。顯而易見的解決方案是使用javascript來克隆#main-view,設置overflow: hidden,然后適當地更改寬度/高度,但是在我看來,很難將其推廣到更復雜的頁面/ CSS結構。有沒有更好的方法來實現此目標,而又不會降低性能影響并最大程度地提高了通用性?
查看完整描述

3 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

-webkit-和Firefox Working Example,現在可調整大小/流暢。


JS


$(document).ready(function () {

    frost = function () {

        var w = $('#main-view').width();

        html2canvas(document.body, {

            onrendered: function (canvas) {

                document.body.appendChild(canvas);

                $('canvas').wrap('<div id="contain" />');

            },

            width: w,

            height: 30

        });

        $('canvas, #partial-overlay, #cover').hide();

        $('#cover').fadeIn('slow', function () {

            $('#partial-overlay').fadeIn('slow');

        });

    };


    $('body').append('<div id="cover"></div><svg id="svg-image-blur"><filter id="blur-effect-1"><feGaussianBlur stdDeviation="2"/></filter></svg>');


    $('#main-view').click(function () {

        frost();

        $('#partial-overlay').addClass('vis');

        $(window).resize(function () {

            $('canvas, #partial-overlay, #cover').hide();

        });


        function onResize() {

            if ($('#partial-overlay').hasClass('vis')) {

                frost();

            }

        }

        var timer;

        $(window).bind('resize', function () {

            timer && clearTimeout(timer);

            timer = setTimeout(onResize, 50);

        });


    });


    $('#partial-overlay').click(function () {

        $('#partial-overlay').removeClass('vis');

        $('canvas, #partial-overlay, #cover').hide();

    });

});

的CSS


#main-view {

    width:75%;

    height:50%;

    box-sizing: border-box;

    margin:8px;

}

#partial-overlay {

    display:none;

    width: 100%;

    height: 20px;

    position: absolute;

    top: 0;

    left: 0;

    z-index:99;

    background: rgba(255, 255, 255, 0.2);

    cursor:pointer;

}

canvas {

    position: absolute;

    top: 0;

    left: 0;

    -webkit-filter:blur(5px);

    filter: url(#blur-effect-1);

}

#cover {

    display:none;

    height:19px;

    width:100%;

    background:#fff;

    top:0;

    left:0;

    position:absolute;

}

#contain {

    height:20px;

    width:100%;

    overflow:hidden;

    position:absolute;

    top:0;

    left:0;

}

svg {

    height:0;

    width:0;

}

的HTML


<div id="main-view">

    <div style="width: 10%; height: 20%; background: #f00; float: left"></div>To my left is a red box

    <br>Now there is just text

    <br>Text that goes on for a few pixels

    <br>or even more</div>

<div id="partial-overlay">Here is some content</div>

我將其放在click函數中,因為我認為這將是最可能的用例。在準備好文檔時,它將同樣有效。


盡管畫布表示不會是完美的像素,但我認為在大多數情況下它并不重要,因為其模糊了。


更新:根據要求,現在可以調整大小。我還將Cover div移到了JS中,并為Firefox添加了一個svg后備。調整大小要求在每次調整大小時都重新繪制畫布,因此我將其設置為在調整大小時隱藏畫布,覆蓋圖等,然后在調整大小停止時替換畫布。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 1363 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號