我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript如何实现带粒子效果的进度条

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript如何实现带粒子效果的进度条

这篇文章主要讲解了“JavaScript如何实现带粒子效果的进度条”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript如何实现带粒子效果的进度条”吧!

具体代码如下

<html>    <head>        <meta charset="utf8"/>        <!--        <meta name="viewport" content="width=device-width,user-scalable=no, initial-scale=1, maximum-scale=1" />        -->        <title>粒子效果实战</title>        <style type="text/css">            body {                background:#111;            }            #canvas {                background:transparent;                border:1px dashed #171717;                margin:-151px 0 0 -401px;                position:absolute;                left:50%;                top:50%;            }        </style>    </head>    <body onload="init()">        <canvas id="canvas" width="800px" height="300px">浏览器不支持canvas</canvas>        <script type="text/javascript">            //判断是否支持canvaas            function isSupportCanvas(canvas) {                return !!(canvas.getContext && canvas.getContext("2d"));            }            //requestAnimationFrame会自动使用最优的帧率进行渲染            function setupRAF() {                window.lastTime = 0;                //兼容各个浏览器,Internet Explorer11、Google Chrome(Microsoft Edge)、Mozilla Firefox、Opera                var vendors = ["ms", "moz", "webkit", "o"];                for(var i=0; i<vendors.length; i++) {                    window.requestAnimationFrame = window[vendors[i] + "RequestAnimationFrame"];                    window.cancelAnimationFrame = window[vendors[i] + "CancelAnimationFrame"] || window[vendors[i] + "CancelRequestAnimationFrame"];                    //测试浏览器支持哪一张                    if(window.requestAnimationFrame) {                        console.log(vendors[i] + "requestAnimationFrame");                    }                    if(window[vendors[i] + "CancelAnimationFrame"]) {                        console.log(vendors[i] + "CancelAnimationFrame");                    }                    if(window[vendors[i] + "CancelRequestAnimationFrame"]) {                        console.log(vendors[i] + "CancelRequestAnimationFrame");                    }                }                //回退机制                if(!window.requestAnimationFrame) {                    window.requestAnimationFrame = function(callback, element) {                        var currentTime = new Date().getTime();                        var timeToCall = Math.max(0, 16-(currentTime-window.lastTime));                        var callTime = currentTime + timeToCall;                        var id = window.setTimeout(function() {                            callback(callTime);                        }, timeToCall);                        window.lastTime = callTime;                        return id;                    };                }                //回退机制                if(!window.cancelAnimationFrame) {                    window.cancelAnimationFrame = function(id) {                        clearTimeout(id);                    }                }            }            //在[min, max]中随机取一个数            function rand(min, max) {                return Math.random() * (max - min + 1) + min;            }            //判断两碰撞盒是否相交            function isHit(x1, y1, w1, h2, x2, y2, w2, h3) {                return !( x1 + w1 < x2 || x2 + w2 < x1 || y1 + h2 < h3 || y2 + h3 < h2);            }            //判断点是否在指定区域内            function isInRect(x, y, rx, ry, rw, rh) {                return !(x < rx || x > rx + rw || y < ry || y > ry + rh);            }            //将数限制在某个范围之内            function limit(value, min, max) {                if(value < min) {                    return min;                } else if(value > max) {                    return max;                }                return value;            }            var CanvasController = function(canvas) {                var ctx = canvas.getContext("2d");                //进度条对象                var Loader = function() {                    //进度条宽度                    this.width = canvas.width - 80;                    //进度条高度                    this.height = 20;                    //进度条X坐标                    this.x = (canvas.width - this.width) / 2;                    //进度条Y坐标                    this.y = (canvas.height - this.height) / 2;                    //进度条当前值                    this.value = 0;                    //进度条最大值                    this.maxValue = 100;                    //进度条更新速度                    this.speed = .5;                    //加深的颜色                    this.lighterColor = "#222";                    //HSL(Hue:色相,Saturation:饱和度,Lightness:饱和度)                    this.hue = 0;                    this.hueStart = 0;                    this.hueEnd = 360;                    //获取当前值对应的X坐标                    this.currentPosX = function() {                        return this.x + this.width * this.value / 100;                     }                    //更新进度条                    this.update = function() {                        this.value += this.speed;                        if(this.value > this.maxValue) {                            this.value = 0;                        }                    }                    //渲染进度条                    this.render = function() {                        ctx.globalCompositeOperation = "source-over";                        var currentWidth = this.width * this.value / 100;                        this.hue = this.hueStart + (this.hueEnd - this.hueStart) * this.value / 100;                        //ctx.fillStyle = "hsl(" + this.hue + ", 100%, 40%)";                        var linearGradient = ctx.createLinearGradient(this.x, this.y, this.x + currentWidth, this.y);                        linearGradient.addColorStop(0, "hsl(" + this.hueStart + ", 100%, 40%)");                        linearGradient.addColorStop(1, "hsl(" + this.hue + ", 100%, 40%)");                        ctx.fillStyle = linearGradient;                        ctx.fillRect(this.x, this.y, currentWidth, this.height);                        ctx.fillStyle = this.lighterColor;                        ctx.globalCompositeOperation = "lighter";                                           ctx.fillRect(this.x, this.y, currentWidth, this.height/2);                    }                }                //单个粒子对象                var Particle = function(x, y, hue, minX, maxX) {                    //粒子的X坐标                    this.x = x;                    //粒子的Y坐标                    this.y = y;                    //粒子的宽度                    this.width = rand(1,3);                    //粒子的高度                    this.height = rand(1,2);                    //粒子的HSL颜色的hue分量                    this.hue = limit(hue + rand(-15,15), 0, 360);                    //粒子在X方向上的速度                    this.velocityX = rand(-1,1);                    //粒子在Y方向上的速度                    this.velocityY = rand(-30,-20);                    //粒子在X方向上的加速度                    this.accelerationX = -.5;                    //粒子在Y方向上的加速度                    this.accelerationY = 4;                    //单位时间                    this.unitTime = .2;                    //更新粒子位置                    this.update = function() {                        this.x += (this.velocityX * this.unitTime);                        this.y += (this.velocityY * this.unitTime);                        this.velocityX += (this.accelerationX * this.unitTime * rand(-1,1));                        this.velocityY += (this.accelerationY * this.unitTime);                    }                    //渲染粒子                    this.render = function() {                        ctx.fillStyle = "hsl(" + this.hue + ", 100%, 40%)"                        ctx.globalCompositeOperation = "source-over";                        ctx.fillRect(this.x, this.y, this.width, this.height);                    }                }                //所有粒子效果的对象                var Particles = function(minX, maxX) {                    //存放生成的所有粒子对象                    this.values = [];                    //粒子生成速率                    this.rate = 3;                    //生成粒子                    this.generate = function(x, y, hue) {                        for(var i=0; i<this.rate; i++) {                            this.values.push(new Particle(x, y, hue, minX, maxX));                        }                    }                    //更新进度值                    this.update = function() {                        for(var i = this.values.length-1; i >= 0; i--) {                            this.values[i].update();                            if(!isInRect(this.values[i].x, this.values[i].y, 0, 0, canvas.width, canvas.height)) {                                this.values.splice(i, 1);                            }                        }                    }                    //渲染进度条                    this.render = function() {                        for(var i =0; i<this.values.length; i++) {                            this.values[i].render();                        }                    }                }                //清空画布                function clearCanvas() {                    //默认值,表示图形将绘制在现有画布之上                    ctx.globalCompositeOperation = "source-over";                    ctx.clearRect(0, 0, canvas.width, canvas.height);                }                //初始化函数                this.init = function() {                    var loader = new Loader();                    var particles = new Particles(loader.x, loader.x + loader.width);                    var loop = function() {                        requestAnimationFrame(loop, canvas);                        clearCanvas();                        loader.update();                        loader.render();                        particles.generate(loader.currentPosX()-3, loader.y + loader.height/2, loader.hue);                        particles.update();                        particles.render();                    }                    loop();                }            }            function init() {                var canvas = document.getElementById("canvas");                if(!isSupportCanvas(canvas)) {                    return;                }                setupRAF();                var canvasController = new CanvasController(canvas);                canvasController.init();            }        </script>    </body></html>

JavaScript如何实现带粒子效果的进度条

感谢各位的阅读,以上就是“JavaScript如何实现带粒子效果的进度条”的内容了,经过本文的学习后,相信大家对JavaScript如何实现带粒子效果的进度条这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript如何实现带粒子效果的进度条

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript如何实现带粒子效果的进度条

这篇文章主要讲解了“JavaScript如何实现带粒子效果的进度条”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript如何实现带粒子效果的进度条”吧!具体代码如下
2023-07-02

如何在HTML5中实现一个超炫酷粒子效果的进度条

如何在HTML5中实现一个超炫酷粒子效果的进度条?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript代码/*=========================
2023-06-09

JavaScript+Canvas实现带跳动效果的粒子动画

这篇文章主要为大家详细介绍了如何通过JavaScript和Canvas实现带跳动效果的粒子动画,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
2023-03-14

怎么使用JavaScript+Canvas实现带跳动效果的粒子动画

这篇“怎么使用JavaScript+Canvas实现带跳动效果的粒子动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使
2023-07-05

ThingJS粒子特效如何实现雨雪效果

这篇文章主要介绍了ThingJS粒子特效如何实现雨雪效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用ThingJS可以快速编写粒子效果,比如:下雨、下雪(可以控制雨雪大
2023-06-15

JavaScript+Canvas实现酷炫的粒子和流星效果

这篇文章主要为大家详细介绍了如何利用JavaScript和Canvas实现酷炫的粒子和流星动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-01-31

HTML5如何实现自带进度条和滑块滑杆效果

小编给大家分享一下HTML5如何实现自带进度条和滑块滑杆效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、H5自带进度条

进度:%

2023-06-09

如何在html中实现进度条效果

今天就跟大家聊聊有关如何在html中实现进度条效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 标签定义运行中的任务进度(进程)。下载进度:
2023-06-15

Android如何实现带进度条的WebView

这篇文章将为大家详细讲解有关Android如何实现带进度条的WebView,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android 实现带进度条的WebView的实例1. WebView加载网页方法/
2023-05-30

如何利用CSS实现波浪进度条效果

本篇内容介绍了“如何利用CSS实现波浪进度条效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CSS Painting API再简单快速的过
2023-07-04

如何使用批处理实现进度条效果

这篇文章主要为大家展示了“如何使用批处理实现进度条效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用批处理实现进度条效果”这篇文章吧。代码如下:@echo off echo. echo.
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录