如何写一个花里胡哨的点击按钮(HTML+CSS,2024年最新诚意分享

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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

HTTP

  • HTTP 报文结构是怎样的?

  • HTTP有哪些请求方法?

  • GET 和 POST 有什么区别?

  • 如何理解 URI?

  • 如何理解 HTTP 状态码?

  • 简要概括一下 HTTP 的特点?HTTP 有哪些缺点?

  • 对 Accept 系列字段了解多少?

  • 对于定长和不定长的数据,HTTP 是怎么传输的?

  • HTTP 如何处理大文件的传输?

  • HTTP 中如何处理表单数据的提交?

  • HTTP1.1 如何解决 HTTP 的队头阻塞问题?

  • 对 Cookie 了解多少?

  • 如何理解 HTTP 代理?

  • 如何理解 HTTP 缓存及缓存代理?

  • 为什么产生代理缓存?

  • 源服务器的缓存控制

  • 客户端的缓存控制

  • 什么是跨域?浏览器如何拦截响应?如何解决?

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

对于定长和不定长的数据,HTTP 是怎么传输的?

  • HTTP 如何处理大文件的传输?

  • HTTP 中如何处理表单数据的提交?

  • HTTP1.1 如何解决 HTTP 的队头阻塞问题?

  • 对 Cookie 了解多少?

  • 如何理解 HTTP 代理?

  • 如何理解 HTTP 缓存及缓存代理?

  • 为什么产生代理缓存?

  • 源服务器的缓存控制

  • 客户端的缓存控制

  • 什么是跨域?浏览器如何拦截响应?如何解决?

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-km89NYTG-1712760676215)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值