svg+js实现海水波浪泡泡动画效果代码
代码语言:html
所属分类:动画
代码描述:svg+js实现海水波浪泡泡动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> html, body{ margin:0; padding:0; background-color:hsl(195, 100%, 7%); } #canvas{ margin:0 auto; display:block; filter:url('#shadowed-goo'); } svg{ display:none; } </style> </head> <body > <canvas id="canvas">Your browser doesn't support canvas</canvas> <!-- SVG Goo filter from: https://css-tricks.com/gooey-effect/ --> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <filter id="shadowed-goo"> <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="10" /> <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7" result="goo" /> <feGaussianBlur in="goo" stdDeviation="3" result="shadow" /> <feColorMatrix in="shadow" mode="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -0.2" result="shadow" /> <feOffset in="shadow" dx="1" dy="1" result="shadow" /> <feBlend in2="shadow" in="goo" result="goo" /> <feBlend in2="goo" in="SourceGraphic" result="mix" /> </filter> <filter id="goo"> <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="10" /> <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7" result="goo" /> <feBlend in2="goo" in="SourceGraphic" result="mix" /> </filter> </defs> </svg> <script > /** * Constants */ const TWO_PI = Math.PI * 2; /** * Application Class */ class Application { /** * Application constructor */ constructor() { this.canvas = document.getElementById("canvas"); this.context = this.canvas.getContext("2d"); this.width = this.canvas.width = window.innerWidth; this.height = this.canvas.height = window.innerHeight; this.center = { x: this.width / 2, y: this.height / 2 }; this.circleContainers = []; //Resize listener for the canvas to fill browser window dynamically window.addEventListener('resize', () => this.resizeCanvas(), false); } /** * Simple resize function. Reinitializes everything on the canvas while changing the width/height */ resizeCanvas() { this.width = this.canvas.width = window.innerWidth; this.height = this.canvas.height = window.innerHeight; this.center = { x: this.width / 2, y: this.height / 2 }; //Empty the previous container and fill it again with new CircleContainer objects this.circleContainers = []; this.initializeCircleContainers(); } /** * Create a number of CircleContainer objects based on the numberOfContainers variable * @return void */ initializeCircleContainers() { for (let x = 0; x < this.width + 100; x += 100) { for (let y = 0; y < this.height + 100; y += 100) { //Initialize a new instance of the CircleContainer class let circleContainer = new CircleContainer(this.context, x, y); //Let the CircleContainer initialize it's children circleContainer.initializeCircles(); //Add the container to our array of CircleContainer objects this.circleContainers.push(circleContainer); } } } /** * Updates the.........完整代码请登录后点击上方下载按钮下载查看
网友评论0