TweenMax+rx实现彩色线条流动动画效果代码

代码语言:html

所属分类:动画

代码描述:TweenMax+rx实现彩色线条流动动画效果代码

代码标签: 线条 流动 动画 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<html lang="en">
<head>

    <meta charset="UTF-8">



    <style>
        html, body {
            width: 100%;
            height: 100%;
            overflow: hidden;
            margin: 0;
            padding: 0;
            -webkit-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none;
            user-select: none;
            color: #111;
        }

        body {
            background-color: #303030;
        }

        #app {
            width: 100%;
            height: 100%;
        }
    </style>


</head>

<body>
    <div id="app">
        <svg id="stage" width="497" height="418" xmlns="http://www.w3.org/2000/svg"></svg>
    </div>


<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/TweenMax.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/Rx.5.0.1.js"></script>
    <script>
        "use strict";
        // Tidier code with webpack and better Typescript in Github
        // https://github.com/ste-vg/svg-squiggles
        console.clear();
        var SquiggleState;
        (function (SquiggleState) {
            SquiggleState[SquiggleState["ready"] = 0] = "ready";
            SquiggleState[SquiggleState["animating"] = 1] = "animating";
            SquiggleState[SquiggleState["ended"] = 2] = "ended";
        })(SquiggleState || (SquiggleState = {}));
        class Squiggle {
            constructor(stage, settings, grid) {
                this.sqwigs = [];
                this.state = SquiggleState.ready;
                this.grid = grid;
                this.stage = stage;
                settings.width = 0;
                settings.opacity = 1;
                this.state = SquiggleState.animating;
                let path = this.createLine(settings);
                let sqwigCount = 3;
                for (let i = 0; i < sqwigCount; i++) {
                    this.createSqwig(i, sqwigCount, path, JSON.parse(JSON.stringify(settings)), i == sqwigCount - 1);
                }
            }
            createSqwig(index, total, path, settings, forceWhite) {
                let sqwig = document.createElementNS("http://www.w3.org/2000/svg", 'path');
                sqwig.setAttribute('d', path);
                sqwig.style.fill = 'none';
                sqwig.style.stroke = forceWhite ? '#303030': this.getColor();
                sqwig.style.strokeLinecap = "round";
                settings.length = sqwig.getTotalLength();
                settings.chunkLength = settings.length / 6; //(settings.sections * 2) + (Math.random() * 40);
                settings.progress = settings.chunkLength;
                sqwig.style.strokeDasharray = `${settings.chunkLength}, ${settings.length + settings.chunkLength}`;
                sqwig.style.strokeDashoffset = `${settings.progress}`;
                this.stage.appendChild(sqwig);
                this.sqwigs.unshift({
                    path: sqwig, settings: settings
                });
                TweenLite.to(settings, settings.sections * 0.1, {
                    progress: -settings.length,
                    width: settings.sections * 0.9,
                    ease: Power1.easeOut,
                    delay: index * (settings.sections * 0.01),
                    onComplete: () => {
                        if (index = total - 1)
                            this.state = SquiggleState.ended;
                        sqwig.remove();
                    }
                });
            }
            update() {
                this.sqwigs.map((set) => {
                    set.path.style.strokeDashoffset = `${set.settings.progress}`;
                    set.path.style.strokeWidth = `${set.settings.width}px`;
                    set.path.style.opacity = `${set.settings.opacity}`;
                });
     .........完整代码请登录后点击上方下载按钮下载查看

网友评论0