TweenLite实现canvas线条跟随鼠标移动视觉差异动画代码

代码语言:html

所属分类:视觉差异

代码描述:TweenLite实现canvas线条跟随鼠标移动视觉差异动画代码

代码标签: TweenLite canvas 线条 跟随 鼠标 移动 视觉差异

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

<!doctype html>
<html>

<head>
   
<meta charset="utf-8">


   
<style>
        html
{
         
height: 100%;
       
}
       
        main
{
         
height: 100%;
       
}
       
        body
{
         
height: 100%;
         
background: #02020e;
         
min-height: 100vh;
         
overflow: hidden;
       
}
       
       
.canvas-wrap {
         
height: 100%;
         
width: 100%;
         
z-index: 3;
       
}
       
.canvas-wrap .shadow-left {
         
position: absolute;
         
width: 80px;
         
height: 100%;
         
top: 0;
         
left: 0;
         
z-index: 1;
         
background-image: linear-gradient(to left, rgba(9, 1, 24, 0) 0%, #090118 100%);
       
}
       
.canvas-wrap .shadow-right {
         
position: absolute;
         
width: 80px;
         
height: 100%;
         
top: 0;
         
right: 0;
         
z-index: 1;
         
background-image: linear-gradient(to right, rgba(9, 1, 24, 0) 0%, #090118 100%);
       
}
       
.canvas-wrap .shadow-top {
         
position: absolute;
         
width: 100%;
         
height: 80px;
         
top: 0;
         
left: 0;
         
z-index: 1;
         
background-image: linear-gradient(to top, rgba(9, 1, 24, 0) 0%, #090118 100%);
       
}
       
.canvas-wrap .shadow-bottom {
         
position: absolute;
         
width: 100%;
         
height: 80px;
         
bottom: 0;
         
left: 0;
         
z-index: 1;
         
background-image: linear-gradient(to bottom, rgba(9, 1, 24, 0) 0%, #090118 100%);
       
}
       
.canvas-wrap:before {
         
content: "";
         
position: absolute;
         
width: 80px;
         
height: 100%;
         
top: 0;
         
right: 0;
         
z-index: 1;
         
background-image: linear-gradient(to right, rgba(9, 1, 24, 0) 0%, #090118 100%);
       
}
       
.canvas-wrap img {
         
display: block;
         
width: 100%;
         
height: 100%;
         
position: absolute;
         
left: 0;
         
top: 50%;
         
transform: translateY(-50%);
         
z-index: 1;
         
opacity: 0;
         
transition: opacity 1s ease 0.3s;
       
}
       
.canvas-wrap img.loaded {
         
opacity: 1;
       
}
   
</style>
</head>

<body>

   
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/TweenLite.js"></script>
   
<main id="main" data-page-id="home">
       
<div class="canvas-wrap">
           
<canvas id="canvas"></canvas>
           
<div class="shadow-left"></div>
           
<div class="shadow-right"></div>
           
<div class="shadow-bottom"></div>
           
<div class="shadow-top"></div>
       
</div>
   
</main>


   
<script>
        const MOBILE_DEVICE_SCREEN_WIDTH = 690;
        const FULL_HD_DEVICE_SCREEN_WIDTH = 1920;
        const img = document.getElementById('img');
       
        class Director {
       
            _setup() {
                this._el = document.getElementById('main');
                this.rect = this._el.getBoundingClientRect();
       
                this.onMouseMove = this.onMouseMove.bind(this);
                this.onMouseLeave = this.onMouseLeave.bind(this);
                this.resize = this.resize.bind(this);
       
                this.isMobile = false;
                this.isFullHD = false;
                this.mobileFlagChanged = false;
                this.width = window.innerWidth;
       
                // base canvas settings
                this.canvasSetings = {
                    startingX: 0,
                    startingY: 0,
                    baseSpeed: 0.0001,
                    lineGroupsQuantity: 4,
                    scale: [2, 3.1, 3.6, 2.5, 2.2, 3, 2.6, 4, 4.5, 5, 7, 8, 9, 10, 12],
                    canvas: this._el.querySelector('#canvas'),
                    mouseX: 0,
                    mouseY: 0,
                    mouseParallaxCoef: 3,
                };
       
       
                // canvas desktop settings
                this.fullHDCanvasSettings = {
                    count: 600,
                    particleSizeY: 39,
                    particleSizeX: 0.48,
                    fatLineQuantity: 9,
                    fatLineWidth: 15,
                    fatLineHeight: 250,
                    floatAmplitude: 10,
                };
       
                // canvas desktop settings
                this.desktopCanvasSettings = {
                    count: 400,
                    particleSizeY: 30,
                    particleSizeX: 0.4,
                    fatLineQuantity: 8,
                    fatLineWidth: 13,
                    fatLineHeight: 200,
                    floatAmplitude: 10,
                };
       
                // canvas mobile settings
                this.mobileCanvasSettings = {
                    count: 100,
                    particleSizeY: 18,
                    particleSizeX: 0.4,
                    fatLineQuantity: 4,
                    fatLineWidth: 7,
                    fatLineHeight: 100,
                    floatAmplitude: 0,
                };
       
                // canvas init
                this._canvas = new Canvas(this.canvasSetings);
                if (this.updateMobileFlag(this.width)) {
                    this.setCanvasSettings();
                    this._canvas.setup();
                    this.resize();
                } else {
                    this._canvas.setCanvasSize();
                }
            }
       
            resize() {
                this.width = window.innerWidth;
       
                if (this.updateMobileFlag(this.width)) {
                    this.setCanvasSettings();
                    this._canvas.setup();
                } else {
                    this._canvas.setCanvasSize();
                }
       
                this._canvas.renderOnce();
            }
       
            setCanvasSettings() {
                if (this.isMobile) {
                    Object.assign(
                        this.canvasSetings,
                        this.mobileCanvasSettings,
                    );
                }
       
                if (this.isFullHD) {
                    Object.assign(
                        this.canvasSetings,
                        this.fullHDCanvasSettings,
                    );
                }
       
                if (!this.isFullHD && !this.isMobile) {
                    Object.assign(
                        this.canvasSetings,
                        this.desktopCanvasSettings,
                    );
                }
            }
       
            updateMobileFlag(width) {
                const isMobile = width < MOBILE_DEVICE_SCREEN_WIDTH;
                const isFullHD = width > FULL_HD_DEVICE_SCREEN_WIDTH;
       
                if (isMobile !== this.isMobile) {
                   .........完整代码请登录后点击上方下载按钮下载查看

网友评论0