美文网首页
第六节 SVG滤镜 feTurbulence与feDisplac

第六节 SVG滤镜 feTurbulence与feDisplac

作者: CODERLIHAO | 来源:发表于2020-04-05 22:53 被阅读0次

feTurbulence与feDisplacementMap经常配合使用

例子1

图1.gif
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>feTurbulence</title>
    <style>

        body {
            font-family: 'Amatic SC', sans-serif;
            font-size: 100px;
        }

        .test {
            -webkit-animation: squiggly-anim 0.34s linear infinite;
            animation: squiggly-anim 0.34s linear infinite;
        }

        body {
            line-height: 100vh;
            background: #111;
            color: #fff;
        }

        .test {
            display: inline-block;
            vertical-align: middle;
            width: 100%;
            outline: none;
            text-align: center;
            line-height: 1;
        }

        .small {
            font-size: 0.5em;
        }

        .smaller {
            font-size: 0.4em;
        }

        p {
            margin: 0;
        }

        @-webkit-keyframes squiggly-anim {
            0% {
                -webkit-filter: url("#squiggly-0");
                filter: url("#squiggly-0");
            }
            25% {
                -webkit-filter: url("#squiggly-1");
                filter: url("#squiggly-1");
            }
            50% {
                -webkit-filter: url("#squiggly-2");
                filter: url("#squiggly-2");
            }
            75% {
                -webkit-filter: url("#squiggly-3");
                filter: url("#squiggly-3");
            }
            100% {
                -webkit-filter: url("#squiggly-4");
                filter: url("#squiggly-4");
            }
        }

        @keyframes squiggly-anim {
            0% {
                -webkit-filter: url("#squiggly-0");
                filter: url("#squiggly-0");
            }
            25% {
                -webkit-filter: url("#squiggly-1");
                filter: url("#squiggly-1");
            }
            50% {
                -webkit-filter: url("#squiggly-2");
                filter: url("#squiggly-2");
            }
            75% {
                -webkit-filter: url("#squiggly-3");
                filter: url("#squiggly-3");
            }
            100% {
                -webkit-filter: url("#squiggly-4");
                filter: url("#squiggly-4");
            }
        }
    </style>
</head>
<body translate="no">
<div class="test" contenteditable="">
    Squiggly Text
    <p class="small">– with – </p>
    <p>
        SVG Filters
    </p>
    <p class="small">(you can even edit this text)</p>
    <p class="smaller">(only tested on Chrome so far)</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <defs>
        <filter id="squiggly-0">
            <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="0"></feTurbulence>
            <feDisplacementMap id="displacement" in="SourceGraphic" in2="noise" scale="6"></feDisplacementMap>
        </filter>
        <filter id="squiggly-1">
            <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="1"></feTurbulence>
            <feDisplacementMap in="SourceGraphic" in2="noise" scale="8"></feDisplacementMap>
        </filter>
        <filter id="squiggly-2">
            <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="2"></feTurbulence>
            <feDisplacementMap in="SourceGraphic" in2="noise" scale="6"></feDisplacementMap>
        </filter>
        <filter id="squiggly-3">
            <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="3"></feTurbulence>
            <feDisplacementMap in="SourceGraphic" in2="noise" scale="8"></feDisplacementMap>
        </filter>
        <filter id="squiggly-4">
            <feTurbulence id="turbulence" baseFrequency="0.02" numOctaves="3" result="noise" seed="4"></feTurbulence>
            <feDisplacementMap in="SourceGraphic" in2="noise" scale="6"></feDisplacementMap>
        </filter>
    </defs>
</svg>
</body>
</html>

例子2

图2.gif
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>feTurbulence</title>
    <style>
        body {
        background: #cfcfcf;
    }
    #container,
    #water {
        background-image: url("lake.jpg");
        background-position: center bottom;
    }
    #container {
        position: absolute;
        top: calc(50% - 206px);
        left: calc(50% - 275px);
        height: 412px;
        width: 550px;
        overflow: hidden;
        box-shadow: 0 4px 20px #4f4f4f;
    }
    #container #water {
        position: absolute;
        bottom: 0;
        width: 100%;
        height: 66%;
        -webkit-filter: url("#turbulence");
        filter: url("#turbulence");
    }
    </style>
</head>
<body>
<script src="https://wow.techbrood.com/libs/jquery/jquery-1.11.1.min.js"></script>
<script src="https://wow.techbrood.com/libs/gsap/TweenMax.min.js"></script>
<div id="container">
    <div id="water"></div>
</div>
<svg xlmns="https://www.w3.org/2000/svg" version="1.1">
    <filter id="turbulence" filterUnits="objectBoundingBox" x="0" y="0" width="100%" height="100%">
        <feTurbulence id="feturbulence"  numOctaves="3"  stitchTiles="noStitch" baseFrequency="0.016897500000000037 0.11897500000000037"></feTurbulence>
        <feDisplacementMap xChannelSelector="G" yChannelSelector="B" scale="20" in="SourceGraphic"></feDisplacementMap>
    </filter>
</svg>
<script>
    var timeline = new TimelineMax({
        repeat: -1,
        yoyo: true
    }),
    feTurb = document.querySelector('#feturbulence');

timeline.add(
    new TweenMax.to(feTurb, 8, {
        onUpdateParams: [feTurb], //pass the filter element to onUpdate
        onUpdate: function(fe) {
            var bfX = this.progress() * 0.005 + 0.015, //base frequency x
                bfY = this.progress() * 0.05 + 0.1, //base frequency y
                bfStr = bfX.toString() + ' ' + bfY.toString(); //base frequency string
            fe.setAttribute('baseFrequency', bfStr);
        }
    }), 0);
</script>
</body>
</html>
lake.jpg

去掉feDisplacementMap后


d.gif

参考:
https://codepen.io/lbebber/pen/KwGEQv?cf_chl_jschl_tk=baf95abf240c1172321c5826e657df8f7db7a6e7-1586092222-0-AfRMbChh07rfS0d6D6UzmYWpNhHXW46qVqgzBiScnWv0goSlux_xiXZ3GjgQV81mIkYimnWXK1myP9hGCotePW-1hLaeiMyWDWfhfcfQkYXoHUn3KNp5F6mBpZc_5EVVrhYc4ptM2mHTpV-F4ZS4jLuNcHdySQb1yzTV21phcRJYO482Xg-kv4kuLOcBRttemgXCLmIau_Xe5zL_kdxM9HNTOBxcjKLiqWpaJG_1ZNmGD_hs70q9S4uRB_vp7O6qXK_l6vZf-9jlH13oteMmeLrqKOkJkbk_TRmT2VhirCBPKRtPtvRQ6R_CDL1i01ZvOaPx8e8bdMoLE4AtDvrhm9FwuaNBAv5fBTeGQtNjz7ap

相关文章

  • 第六节 SVG滤镜 feTurbulence与feDisplac

    feTurbulence与feDisplacementMap经常配合使用 例子1 例子2 去掉feDisplace...

  • 说说SVG的feTurbulence滤镜

    很多时候,我们在布置游戏地图或者动漫场景的时候,需要模拟火焰,树丛,云朵等等这些大自然鬼斧神工创造出来的形状或者纹...

  • 第四节 SVG滤镜 feTurbulence

    baseFrequency 为了产生噪声,仅需要baseFrequency属性。 baseFrequency影响生...

  • SVG 滤镜

    本节我们学习 SVG 中滤镜,SVG 滤镜是滤镜中的一个类型,用来向形状和文本添加特殊的效果。 SVG的可用滤镜 ...

  • SVG 滤镜

    SVG 滤镜用来向形状和文本添加特殊的效果。 在 SVG 中,可用的滤镜有: feBlend feColorMat...

  • 第一章 d3基础概念

    svg基础 滤镜 渐变

  • SVG 滤镜

    http://www.w3cplus.com/svg/why-the-svg-filter-is-awesome....

  • SVG-滤镜与动画

    滤镜 剪切 渐变 线性渐变 径向渐变 遮罩 嵌入光栅图像 动画 SMIL Synchronized Multime...

  • SVG滤镜:feColorMatrix

    颜色滤镜就是用来对原图的每个像素点的RGBA颜色进行处理生产新的RGBA颜色.元素通常有两个属性:type和val...

  • SVG 滤镜feImage

    primitiveUnits userSpaceOnUse如果primitiveUnits属性未指定,那么效果就如...

网友评论

      本文标题:第六节 SVG滤镜 feTurbulence与feDisplac

      本文链接:https://www.haomeiwen.com/subject/sbcmphtx.html