refresh
Bookmark
Subscribe
Logout
Add to cart
Pause
Register
Export
样式代码太长了,影响阅读,有需要源码可以关注公z号:前端老实人获取
关键代码,总共没几行,让它动起来,你们直接复制拿去用就行,不懂的话再私下问我吧。
/* eslint-disable */
(function(global, factory) {
typeof exports === ‘object’ && typeof module !== ‘undefined’ ? module.exports = factory(require(‘animejs’)) :
typeof define === ‘function’ && define.amd ? define([‘animejs’], factory) :
(global.Particles = factory(global.anime));
}(this, (function(anime) {
‘use strict’;
/* eslint-enable */
function Particles(element, options) {
this.el = getElement(element);
this.options = extend({color: getCSSValue(this.el, ‘background-color’)}, this.defaults, options);
this.init();
}
Particles.prototype = {
defaults: {
type: ‘circle’,
style: ‘fill’,
canvasPadding: 150,
duration: 1000,
easing: ‘easeInOutCubic’,
direction: ‘left’,
size: function() { return Math.floor((Math.random() * 3) + 1); },
speed: function() { return rand(4); },
particlesAmountCoefficient: 3,
oscillationCoefficient: 20
},
init: function () {
this.particles = [];
this.frame = null;
this.canvas = document.createElement(‘canvas’);
this.ctx = this.canvas.getContext(‘2d’);
this.canvas.className = ‘particles-canvas’;
this.canvas.style = ‘display:none;’;
this.wrapper = document.createElement(‘div’);
this.wrapper.className = ‘particles-wrapper’;
this.el.parentNode.insertBefore(this.wrapper, this.el);
this.wrapper.appendChild(this.el);
this.parentWrapper = document.createElement(‘div’);
this.parentWrapper.className = ‘particles’;
this.wrapper.parentNode.insertBefore(this.parentWrapper, this.wrapper);
this.parentWrapper.appendChild(this.wrapper);
this.parentWrapper.appendChild(this.canvas);
},
loop: function () {
this.updateParticles();
this.renderParticles();
if (this.isAnimating()) {
this.frame = requestAnimationFrame(this.loop.bind(this));
}
},
updateParticles: function () {
var p;
for (var i = 0; i < this.particles.length; i++) {
p = this.particles[i];
if (p.life > p.death) {
this.particles.splice(i, 1);
} else {
p.x += p.speed;
p.y = this.o.oscillationCoefficient * Math.sin(p.counter * p.increase);
p.life++;
p.counter += this.disintegrating ? 1 : -1;
}
}
if (!this.particles.length) {
this.pause();
this.canvas.style.display = ‘none’;
if (is.fnc(this.o.complete)) {
this.o.complete();
}
}
},
renderParticles: function () {
this.ctx.clearRect(0, 0, this.width, this.height);
var p;
for (var i = 0; i < this.particles.length; i++) {
p = this.particles[i];
if (p.life < p.death) {
this.ctx.translate(p.startX, p.startY);
this.ctx.rotate(p.angle * Math.PI / 180);
this.ctx.globalAlpha = this.disintegrating ? 1 - p.life / p.death : p.life / p.death;
this.ctx.fillStyle = this.ctx.strokeStyle = this.o.color;
this.ctx.beginPath();
if ( this.o.type === ‘circle’ ) {
this.ctx.arc(p.x, p.y, p.size, 0, 2 * Math.PI);
}
else if ( this.o.type === ‘triangle’ ) {
this.ctx.moveTo(p.x, p.y);
this.ctx.lineTo(p.x+p.size, p.y+p.size);
this.ctx.lineTo(p.x+p.size, p.y-p.size);
}
else if ( this.o.type === ‘rectangle’ ){
this.ctx.rect(p.x, p.y, p.size, p.size);
}
if ( this.o.style === ‘fill’ ) {
this.ctx.fill();
}
else if ( this.o.style === ‘stroke’ ) {
this.ctx.closePath();
this.ctx.stroke();
}
this.ctx.globalAlpha = 1;
this.ctx.rotate(-p.angle * Math.PI / 180);
this.ctx.translate(-p.startX, -p.startY);
}
}
},
play: function () {
this.frame = requestAnimationFrame(this.loop.bind(this));
},
pause: function () {
cancelAnimationFrame(this.frame);
this.frame = null;
},
addParticle: function (options) {
var frames = this.o.duration * 60 / 1000;
var speed = is.fnc(this.o.speed) ? this.o.speed() : this.o.speed;
this.particles.push({
startX: options.x,
startY: options.y,
x: this.disintegrating ? 0 : speed * -frames,
y: 0,
angle: rand(360),
counter: this.disintegrating ? 0 : frames,
increase: Math.PI * 2 / 100,
life: 0,
death: this.disintegrating ? (frames - 20) + Math.random() * 40 : frames,
speed: speed,
size: is.fnc(this.o.size) ? this.o.size() : this.o.size
});
},
addParticles: function (rect, progress) {
var progressDiff = this.disintegrating ? progress - this.lastProgress : this.lastProgress - progress;
this.lastProgress = progress;
var x = this.options.canvasPadding;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
HTTP
-
HTTP 报文结构是怎样的?
-
HTTP有哪些请求方法?
-
GET 和 POST 有什么区别?
-
如何理解 URI?
-
如何理解 HTTP 状态码?
-
简要概括一下 HTTP 的特点?HTTP 有哪些缺点?
-
对 Accept 系列字段了解多少?
-
对于定长和不定长的数据,HTTP 是怎么传输的?
-
HTTP 如何处理大文件的传输?
-
HTTP 中如何处理表单数据的提交?
-
HTTP1.1 如何解决 HTTP 的队头阻塞问题?
-
对 Cookie 了解多少?
-
如何理解 HTTP 代理?
-
如何理解 HTTP 缓存及缓存代理?
-
为什么产生代理缓存?
-
源服务器的缓存控制
-
客户端的缓存控制
-
什么是跨域?浏览器如何拦截响应?如何解决?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
对于定长和不定长的数据,HTTP 是怎么传输的?
-
HTTP 如何处理大文件的传输?
-
HTTP 中如何处理表单数据的提交?
-
HTTP1.1 如何解决 HTTP 的队头阻塞问题?
-
对 Cookie 了解多少?
-
如何理解 HTTP 代理?
-
如何理解 HTTP 缓存及缓存代理?
-
为什么产生代理缓存?
-
源服务器的缓存控制
-
客户端的缓存控制
-
什么是跨域?浏览器如何拦截响应?如何解决?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-km89NYTG-1712760676215)]