小程序canvas学习

效果图:

.wxml

<canvas style="width: 100vw; height: 100vh;" canvas-id="firstCanvas"></canvas>

.js

  onLoad: function (options) {

    const ctx = wx.createCanvasContext('firstCanvas')
var canvasWidth = wx.getSystemInfoSync().windowWidth
var canvasHeight = wx.getSystemInfoSync().windowHeight
var numParticles = 50
var bg = [18, 10, 34]
var cols = ['#FF5722', '#FF9800', '#FF9800', '#FF9800', '#FF9800', '#B71C1C', '#00BCD4', '#00BCD4', '#009688']
setup()
function setup() {
ctx.beginPath();
ctx.rect(0, 0, canvasWidth, canvasHeight)
ctx.fillStyle = `rgba(${bg[0]}, ${bg[1]}, ${bg[2]}, ${1})`
ctx.fill()
ctx.draw()
} // window.requestAnimationFrame(animate); setInterval(animate, 60)
function animate() {
fade(0.3)
draw() // window.requestAnimationFrame(function(){animate()})
} function fade(amt) {
ctx.beginPath();
ctx.rect(0, 0, canvasWidth, canvasHeight)
ctx.fillStyle = `rgba(${bg[0]}, ${bg[1]}, ${bg[2]}, ${amt})`
ctx.fill()
ctx.draw()
} function Particle() {
this.pos = {
x: Math.random() * canvasWidth * 0.8 + canvasWidth * 0.1,
y: Math.random() * canvasHeight * 0.8 + canvasHeight * 0.1
}
this.r = 1
this.speed = 6
this.step = Math.random() * 400
this.vx = Math.random() * this.speed / 4 - this.speed / 8
this.vy = Math.random() * this.speed / 4 - this.speed / 8
this.colIndex = Math.floor(Math.random() * cols.length)
this.history = []
this.update = function () {
this.step++
this.step %= 400
if (this.history.length > 5) {
this.history.shift()
}
this.pos.x += this.vx
this.pos.y += this.vy
this.vx = this.vx * 0.98 + (Math.random() * this.speed * 2 - this.speed) * 0.12
this.vy = this.vy * 0.98 + (Math.random() * this.speed * 2 - this.speed) * 0.12
if (this.history.length > 4) {
ctx.beginPath()
ctx.moveTo(this.pos.x, this.pos.y)
for (var i = this.history.length - 1; i >= 0; i--) {
ctx.lineTo(this.history[i].x, this.history[i].y)
}
ctx.fillStyle = cols[this.colIndex]
ctx.strokeStyle = cols[this.colIndex]
ctx.fill()
ctx.lineWidth = 2
ctx.lineJoin = "round"
// ctx.closePath()
ctx.stroke()
}
if (this.pos.x > canvasWidth || this.pos.x < 0 || this.pos.y > canvasHeight || this.pos.y < 0) {
delete this.pos
delete this.history
return false;
}
this.history.push({
x: this.pos.x,
y: this.pos.y
})
return true;
}
} var particles = [new Particle()] function draw() {
if (particles.length < numParticles) {
particles.push(new Particle())
}
particles = particles.filter(function (p) {
return p.update()
}) }
},

总结:目前小程序canvas还很卡 不建议使用

PC端:

效果图

代码:

js

<script type="text/javascript">

var canvas = document.createElement('canvas')
document.getElementsByTagName('body')[0].appendChild(canvas)
var ctx = canvas.getContext('2d')
var numParticles = 50 var bg = [18, 10, 34]
var cols = ['#FF5722', '#FF9800', '#FF9800', '#FF9800', '#FF9800', '#B71C1C', '#00BCD4', '#00BCD4', '#009688'] setup() function setup() {
canvas.width = window.innerWidth
canvas.height = window.innerHeight
ctx.beginPath();
ctx.rect(0, 0, canvas.width, canvas.height)
ctx.fillStyle = `rgba(${bg[0]}, ${bg[1]}, ${bg[2]}, ${1})`
ctx.fill()
} // window.requestAnimationFrame(animate); setInterval(animate, 1000/29.9)
function animate() {
fade(0.3)
draw()
// window.requestAnimationFrame(function(){animate()})
} function fade(amt) {
ctx.beginPath();
ctx.rect(0, 0, canvas.width, canvas.height)
ctx.fillStyle = `rgba(${bg[0]}, ${bg[1]}, ${bg[2]}, ${amt})`
ctx.fill()
} function Particle () {
this.pos = {
x: Math.random() * canvas.width * 0.8 + canvas.width * 0.1,
y: Math.random() * canvas.height * 0.8 + canvas.height * 0.1
}
this.r = 1
this.speed = 6
this.step = Math.random() * 400
this.vx = Math.random() * this.speed/4 - this.speed/8
this.vy = Math.random() * this.speed/4 - this.speed/8
this.colIndex = Math.floor(Math.random()*cols.length)
this.history = []
this.update = function () {
//////////////////////////////////////
this.step ++
this.step %= 400
if (this.history.length > 5){
this.history.shift()
}
this.pos.x += this.vx
this.pos.y += this.vy
this.vx = this.vx * 0.98 + (Math.random() * this.speed * 2 - this.speed) * 0.12
this.vy = this.vy * 0.98 + (Math.random() * this.speed * 2 - this.speed) * 0.12
//////////////////////////////////////
if (this.history.length > 4){
ctx.beginPath()
ctx.moveTo(this.pos.x ,this.pos.y)
for (var i = this.history.length-1; i >= 0; i--){
ctx.lineTo(this.history[i].x ,this.history[i].y)
}
// ctx.fillStyle = `hsla(${Math.sin( this.step / 300) * 70 + 70},${99}%,${50}%,1)`
// ctx.strokeStyle = `hsla(${Math.sin( this.step / 300) * 70 + 70},${99}%,${50}%,0.5)`
ctx.fillStyle = cols[this.colIndex]
ctx.strokeStyle = cols[this.colIndex]
ctx.fill()
ctx.lineWidth = 2
ctx.lineJoin = "round"
// ctx.closePath()
ctx.stroke()
} //////////////////////////////////////
if (this.pos.x > canvas.width || this.pos.x < 0 || this.pos.y > canvas.height || this.pos.y < 0) {
delete this.pos
delete this.history
return false;
}
this.history.push({
x: this.pos.x,
y: this.pos.y
})
return true;
}
} var particles = [new Particle()] function draw() {
if (particles.length < numParticles) {
particles.push(new Particle())
} particles = particles.filter(function (p){
return p.update()
}) }
</script>

记录一下小程序canvas的更多相关文章

  1. 技术博客--微信小程序canvas实现图片编辑

    技术博客--微信小程序canvas实现图片编辑 我们的这个小程序不仅仅是想给用户提供一个保存和查找的平台,还希望能给用户一个展示自己创意的舞台,因此我们实现了图片的编辑部分.我们对对图片的编辑集成了很 ...

  2. 原创:WeZRender:微信小程序Canvas增强组件

    WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...

  3. 微信小程序-canvas绘制文字实现自动换行

    在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生一定的了问题.如果我们绘制的文本长度不确定或者 ...

  4. 微信小程序 canvas 字体自动换行(支持换行符)

    微信小程序 canvas 自动适配 自动换行,保存图片分享到朋友圈  https://github.com/richard1015/News 微信IDE演示代码https://developers.w ...

  5. 微信小程序--canvas画布实现图片的编辑

    技术:微信小程序   概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...

  6. 小程序canvas生成海报保存至手机相册

    小程序canvas画图保存至手机相册 (1)可直接展示生成的海报 .因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报 (2 ...

  7. 优化版小程序canvas,增加失败逻辑,及完善文字

    wxml <view class="shareBox" style="backgound:{{isShow ? '#000' : '#fff'}}" wx ...

  8. 微信小程序 | canvas绘图

    1.新的尺寸单位 rpx rpx(responsive pixel): 可以根据屏幕宽度进行自适应. 规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则 ...

  9. 微信小程序canvas生成并保存图片

    ---恢复内容开始--- 微信小程序canvas生成并保存图片,具体实现效果如下图     实现效果需要做以下几步工作 一.先获取用户屏幕大小,然后才能根据屏幕大小来定义canvas的大小 二.获取图 ...

随机推荐

  1. C语言中格式字符串

    C语言中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项. 一.类型 我们用一定的字符用以表示输出数据的类型,其格式符和意义下表所示: 字符  ...

  2. 使用JavaScript实现单向链表

    一.实现功能 1.链表元素头部插入 this.unShift = function(data) {} 2.链表元素尾部插入 this.append= function(data) {} //返回boo ...

  3. sql中批量插入begin的使用

    private static String ADD_ATTR_EXT_ITEM="insert into attr_ext_item(attr_ext_main_key,attr_name_ ...

  4. 网络-04-端口号-linux端口详解大全--TCP注册端口号大全

    # John Murphy <john.m.murphy&mci.com>afs3-fileserver 7000/tcp file server itselfafs3-files ...

  5. 高校表白APP-冲刺第四天

    第四天,我们进行了团队的的四次会议. 一.任务: 昨天任务:完成登录界面注册界面修改密码界面. 今日任务:完成跳转,并解决闪退问题. 明日任务:连接本地数据库,进行APP的第一次登陆. 二.遇到的困难 ...

  6. Win10环境下 HTTP 错误 500.19 - Internal Server Error 问题及其解决方法

    记一下今日份小bug... 明天要做软件架构实验了,今天打算测试下运行web项目,于是乎,找出了以前用JSP写的web项目测试运行不了,我再打开浏览器测试Tomcat服务器,在地址栏键入http:// ...

  7. PHP中文转拼音

    网上大都讲的,都不支持繁体字,毕竟就是一个函数解决的事. 推荐一个很好的扩展,github地址: https://github.com/overtrue/pinyin 怎么用,自己去看就行了.

  8. RESTClient 使用

    Wisdom RESTClient 一款自动化测试REST API的工具,它可以自动化测试RESTful API并生成精美的测试报告,同时基于测试过的历史API,可以生成精美的RESTful API文 ...

  9. MySQL主从复制虽好,能完美解决数据库单点问题吗?

    一.单个数据库服务器的缺点 数据库服务器存在单点问题: 数据库服务器资源无法满足增长的读写请求: 高峰时数据库连接数经常超过上限. 二.如何解决单点问题 增加额外的数据库服务器,组建数据库集群: 同一 ...

  10. 2019.04.16打卡(java 数组)

    1.  要求输出数组中数据的平均值,并输出所有大于平均值的数据 代码 package block; import java.util.*; public class Average { public ...