返回顶部
首页 > 资讯 > 精选 >js怎么实现花瓣漫天飞舞特效
  • 216
分享到

js怎么实现花瓣漫天飞舞特效

2023-07-04 21:07:53 216人浏览 薄情痞子
摘要

这篇文章主要讲解了“js怎么实现花瓣漫天飞舞特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js怎么实现花瓣漫天飞舞特效”吧!效果:代码:<!DOCTYPE html&nb

这篇文章主要讲解了“js怎么实现花瓣漫天飞舞特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js怎么实现花瓣漫天飞舞特效”吧!

效果:

js怎么实现花瓣漫天飞舞特效

代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD>    <TITLE>花瓣漫天飞舞入流水</TITLE>    <META NAME="Generator" CONTENT="EditPlus">    <META NAME="Author" CONTENT="">    <META NAME="KeyWords" CONTENT="">    <META NAME="Description" CONTENT="">    <style>        html, body{            width: 100%;            height: 100%;            margin: 0;            padding: 0;            overflow: hidden;        }        .container{            width: 100%;            height: 100%;            margin: 0;            padding: 0;            background-color: #000000;        }    </style>    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Jquery/3.3.1/jquery.min.js"></script></HEAD> <BODY> <div id="jsi-cherry-container" class="container"></div><script>    var RENDERER = {        INIT_CHERRY_BLOSSOM_COUNT : 30,        MAX_ADDING_INTERVAL : 10,         init : function(){            this.setParameters();            this.reconstructMethods();            this.createCherries();            this.render();        },        setParameters : function(){            this.$container = $('#jsi-cherry-container');            this.width = this.$container.width();            this.height = this.$container.height();            this.context = $('<canvas />').attr({width : this.width, height : this.height}).appendTo(this.$container).get(0).getContext('2d');            this.cherries = [];            this.maxAddingInterval = Math.round(this.MAX_ADDING_INTERVAL * 1000 / this.width);            this.addingInterval = this.maxAddingInterval;        },        reconstructMethods : function(){            this.render = this.render.bind(this);        },        createCherries : function(){            for(var i = 0, length = Math.round(this.INIT_CHERRY_BLOSSOM_COUNT * this.width / 1000); i < length; i++){                this.cherries.push(new CHERRY_BLOSSOM(this, true));            }        },        render : function(){            requestAnimationFrame(this.render);            this.context.clearRect(0, 0, this.width, this.height);             this.cherries.sort(function(cherry1, cherry2){                return cherry1.z - cherry2.z;            });            for(var i = this.cherries.length - 1; i >= 0; i--){                if(!this.cherries[i].render(this.context)){                    this.cherries.splice(i, 1);                }            }            if(--this.addingInterval == 0){                this.addingInterval = this.maxAddingInterval;                this.cherries.push(new CHERRY_BLOSSOM(this, false));            }        }    };    var CHERRY_BLOSSOM = function(renderer, isRandom){        this.renderer = renderer;        this.init(isRandom);    };    CHERRY_BLOSSOM.prototype = {        FOCUS_POSITION : 300,        FAR_LIMIT : 600,        MAX_RIPPLE_COUNT : 100,        RIPPLE_RADIUS : 100,        SURFACE_RATE : 0.5,        SINK_OFFSET : 20,         init : function(isRandom){            this.x = this.getRandomValue(-this.renderer.width, this.renderer.width);            this.y = isRandom ? this.getRandomValue(0, this.renderer.height) : this.renderer.height * 1.5;            this.z = this.getRandomValue(0, this.FAR_LIMIT);            this.vx = this.getRandomValue(-2, 2);            this.vy = -2;            this.theta = this.getRandomValue(0, Math.PI * 2);            this.phi = this.getRandomValue(0, Math.PI * 2);            this.psi = 0;            this.dpsi = this.getRandomValue(Math.PI / 600, Math.PI / 300);            this.opacity = 0;            this.endTheta = false;            this.endPhi = false;            this.rippleCount = 0;             var axis = this.getAxis(),                theta = this.theta + Math.ceil(-(this.y + this.renderer.height * this.SURFACE_RATE) / this.vy) * Math.PI / 500;            theta %= Math.PI * 2;             this.offsetY = 40 * ((theta <= Math.PI / 2 || theta >= Math.PI * 3 / 2) ? -1 : 1);            this.thresholdY = this.renderer.height / 2 + this.renderer.height * this.SURFACE_RATE * axis.rate;            this.entityColor = this.renderer.context.createRadialGradient(0, 40, 0, 0, 40, 80);            this.entityColor.addColorStop(0, 'hsl(330, 70%, ' + 50 * (0.3 + axis.rate) + '%)');            this.entityColor.addColorStop(0.05, 'hsl(330, 40%,' + 55 * (0.3 + axis.rate) + '%)');            this.entityColor.addColorStop(1, 'hsl(330, 20%, ' + 70 * (0.3 + axis.rate) + '%)');            this.shadowColor = this.renderer.context.createRadialGradient(0, 40, 0, 0, 40, 80);            this.shadowColor.addColorStop(0, 'hsl(330, 40%, ' + 30 * (0.3 + axis.rate) + '%)');            this.shadowColor.addColorStop(0.05, 'hsl(330, 40%,' + 30 * (0.3 + axis.rate) + '%)');            this.shadowColor.addColorStop(1, 'hsl(330, 20%, ' + 40 * (0.3 + axis.rate) + '%)');        },        getRandomValue : function(min, max){            return min + (max - min) * Math.random();        },        getAxis : function(){            var rate = this.FOCUS_POSITION / (this.z + this.FOCUS_POSITION),                x = this.renderer.width / 2 + this.x * rate,                y = this.renderer.height / 2 - this.y * rate;            return {rate : rate, x : x, y : y};        },        renderCherry : function(context, axis){            context.beginPath();            context.moveTo(0, 40);            context.bezierCurveTo(-60, 20, -10, -60, 0, -20);            context.bezierCurveTo(10, -60, 60, 20, 0, 40);            context.fill();             for(var i = -4; i < 4; i++){                context.beginPath();                context.moveTo(0, 40);                context.quadraticCurveTo(i * 12, 10, i * 4, -24 + Math.abs(i) * 2);                context.stroke();            }        },        render : function(context){            var axis = this.getAxis();             if(axis.y == this.thresholdY && this.rippleCount < this.MAX_RIPPLE_COUNT){                context.save();                context.lineWidth = 2;                context.strokeStyle = 'hsla(0, 0%, 100%, ' + (this.MAX_RIPPLE_COUNT - this.rippleCount) / this.MAX_RIPPLE_COUNT + ')';                context.translate(axis.x + this.offsetY * axis.rate * (this.theta <= Math.PI ? -1 : 1), axis.y);                context.scale(1, 0.3);                context.beginPath();                context.arc(0, 0, this.rippleCount / this.MAX_RIPPLE_COUNT * this.RIPPLE_RADIUS * axis.rate, 0, Math.PI * 2, false);                context.stroke();                context.restore();                this.rippleCount++;            }            if(axis.y < this.thresholdY || (!this.endTheta || !this.endPhi)){                if(this.y <= 0){                    this.opacity = Math.min(this.opacity + 0.01, 1);                }                context.save();                context.globalAlpha = this.opacity;                context.fillStyle = this.shadowColor;                context.strokeStyle = 'hsl(330, 30%,' + 40 * (0.3 + axis.rate) + '%)';                context.translate(axis.x, Math.max(axis.y, this.thresholdY + this.thresholdY - axis.y));                context.rotate(Math.PI - this.theta);                context.scale(axis.rate * -Math.sin(this.phi), axis.rate);                context.translate(0, this.offsetY);                this.renderCherry(context, axis);                context.restore();            }            context.save();            context.fillStyle = this.entityColor;            context.strokeStyle = 'hsl(330, 40%,' + 70 * (0.3 + axis.rate) + '%)';            context.translate(axis.x, axis.y + Math.abs(this.SINK_OFFSET * Math.sin(this.psi) * axis.rate));            context.rotate(this.theta);            context.scale(axis.rate * Math.sin(this.phi), axis.rate);            context.translate(0, this.offsetY);            this.renderCherry(context, axis);            context.restore();             if(this.y <= -this.renderer.height / 4){                if(!this.endTheta){                    for(var theta = Math.PI / 2, end = Math.PI * 3 / 2; theta <= end; theta += Math.PI){                        if(this.theta < theta && this.theta + Math.PI / 200 > theta){                            this.theta = theta;                            this.endTheta = true;                            break;                        }                    }                }                if(!this.endPhi){                    for(var phi = Math.PI / 8, end = Math.PI * 7 / 8; phi <= end; phi += Math.PI * 3 / 4){                        if(this.phi < phi && this.phi + Math.PI / 200 > phi){                            this.phi = Math.PI / 8;                            this.endPhi = true;                            break;                        }                    }                }            }            if(!this.endTheta){                if(axis.y == this.thresholdY){                    this.theta += Math.PI / 200 * ((this.theta < Math.PI / 2 || (this.theta >= Math.PI && this.theta < Math.PI * 3 / 2)) ? 1 : -1);                }else{                    this.theta += Math.PI / 500;                }                this.theta %= Math.PI * 2;            }            if(this.endPhi){                if(this.rippleCount == this.MAX_RIPPLE_COUNT){                    this.psi += this.dpsi;                    this.psi %= Math.PI * 2;                }            }else{                this.phi += Math.PI / ((axis.y == this.thresholdY) ? 200 : 500);                this.phi %= Math.PI;            }            if(this.y <= -this.renderer.height * this.SURFACE_RATE){                this.x += 2;                this.y = -this.renderer.height * this.SURFACE_RATE;            }else{                this.x += this.vx;                this.y += this.vy;            }            return this.z > -this.FOCUS_POSITION && this.z < this.FAR_LIMIT && this.x < this.renderer.width * 1.5;        }    };    $(function(){        RENDERER.init();    });</script></BODY></HTML>

感谢各位的阅读,以上就是“js怎么实现花瓣漫天飞舞特效”的内容了,经过本文的学习后,相信大家对js怎么实现花瓣漫天飞舞特效这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: js怎么实现花瓣漫天飞舞特效

本文链接: https://lsjlt.com/news/347787.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • js怎么实现花瓣漫天飞舞特效
    这篇文章主要讲解了“js怎么实现花瓣漫天飞舞特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js怎么实现花瓣漫天飞舞特效”吧!效果:代码:<!DOCTYPE HTML&nb...
    99+
    2023-07-04
  • 花瓣漫天飞舞js特效,简单浪漫
    《黛玉葬花》是文学名著《红楼梦》中的经典片段。林黛玉最怜惜花,觉得花落以后埋在土里(文中指出的是“花冢”)最干净,说明她对美有独特的见解。她写了《葬花吟》,以...
    99+
    2023-01-01
    花瓣网页特效 花瓣js
  • 怎么用html5 canvas实现漫天飞雪效果
    这篇文章主要讲解了“怎么用html5 canvas实现漫天飞雪效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用html5 canvas实现漫天飞雪效...
    99+
    2024-04-02
  • js怎么实现漫天星星效果
    这篇文章主要介绍了js怎么实现漫天星星效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例为大家分享了漫天小星星效果的实现代码,供大家...
    99+
    2024-04-02
  • 怎么用Dreamweaver实现网页上漫天花雨效果
    这篇文章主要讲解了“怎么用Dreamweaver实现网页上漫天花雨效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Dreamweaver实现网页上漫天花雨效果”吧!淡蓝色的天空下,一...
    99+
    2023-06-08
  • JS怎么实现酷炫的烟花特效
    这篇文章主要介绍“JS怎么实现酷炫的烟花特效”,在日常操作中,相信很多人在JS怎么实现酷炫的烟花特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS怎么实现酷炫的烟花特效”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-27
  • 怎么在Android中实现一个花瓣飘落效果
    这篇文章给大家介绍怎么在Android中实现一个花瓣飘落效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智...
    99+
    2023-06-14
  • 怎么使用JS+Canvas实现雪花纷飞的场景
    这篇文章主要介绍“怎么使用JS+Canvas实现雪花纷飞的场景”,在日常操作中,相信很多人在怎么使用JS+Canvas实现雪花纷飞的场景问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用JS+Canvas...
    99+
    2023-07-04
  • 怎么使用canvas实现烟花特效
    小编给大家分享一下怎么使用canvas实现烟花特效,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!canvas可以实现不同动画效果,本文主要记录几种不同节日烟花效果...
    99+
    2023-06-09
  • html5中怎么利用canvas实现3d雪花飘舞效果
    html5中怎么利用canvas实现3d雪花飘舞效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。var SCREEN_WID...
    99+
    2024-04-02
  • JavaScript怎么实现带音效的烟花特效
    这篇文章主要介绍“JavaScript怎么实现带音效的烟花特效”,在日常操作中,相信很多人在JavaScript怎么实现带音效的烟花特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript怎么实...
    99+
    2023-06-22
  • 如何用JS代码实现文字烟花特效
    如何用JS代码实现文字烟花特效,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前我出了一个如何在网页里使用原生JS开发放烟花效果的教程。i...
    99+
    2024-04-02
  • JavaScript怎么实现烟花和福字特效
    这篇文章主要讲解了“JavaScript怎么实现烟花和福字特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript怎么实现烟花和福字特效”吧!超能力一:放烟花先带大家看看实现后...
    99+
    2023-06-26
  • Fiori里花瓣的动画效果实现原理是什么
    本篇文章为大家展示了Fiori里花瓣的动画效果实现原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Fiori里的busy dialog有两种表现形式,一种是下图里的花朵形状,由5个不断旋转的...
    99+
    2023-06-04
  • HTML5和Canvas怎么实现烟花绽放特效
    这篇文章给大家分享的是有关HTML5和Canvas怎么实现烟花绽放特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下:undefinedundefinedundefined代码如下:XML/HTML Co...
    99+
    2023-06-09
  • HTML5中怎么用Canvas实现烟花绽放特效
    这篇文章主要介绍“HTML5中怎么用Canvas实现烟花绽放特效”,在日常操作中,相信很多人在HTML5中怎么用Canvas实现烟花绽放特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 怎么使用html和JavaScript实现3D烟花特效
    今天小编给大家分享一下怎么使用html和JavaScript实现3D烟花特效的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效...
    99+
    2023-07-04
  • JS怎么实现网页鼠标特效
    这篇“JS怎么实现网页鼠标特效”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS怎么实现网页鼠标特效”文章吧。实例一:禁用鼠...
    99+
    2023-06-26
  • Android怎么用ShaderMask实现花里胡哨的文字特效
    这篇文章主要介绍了Android怎么用ShaderMask实现花里胡哨的文字特效的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么用ShaderMask实现花里胡哨的文字特效文章都会有所收获,下面...
    99+
    2023-07-04
  • CSS3中怎么利用animation属性实现雪花飘落特效
    这篇文章给大家介绍CSS3中怎么利用animation属性实现雪花飘落特效,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在CSS3中我们可以使用animation属性来创建复杂的动画效...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作