当前位置: 首页 > wzjs >正文

设计网站的合同小广告多的网站

设计网站的合同,小广告多的网站,统码营销官网,游戏网站建设一条龙这是第二次写canvas,基于微信小程序文档demo进行改写 demo效果为方块横向来回循环移动 我想做的是直播间那种点赞效果,竖向曲线移动、方块换成图片、点击添加绘制元素 第一阶段实现竖向曲线移动、点击添加绘制元素;下一阶段讲方块替换为图…

这是第二次写canvas,基于微信小程序文档demo进行改写

demo效果为方块横向来回循环移动

我想做的是直播间那种点赞效果,竖向曲线移动、方块换成图片、点击添加绘制元素

第一阶段实现竖向曲线移动、点击添加绘制元素;下一阶段讲方块替换为图片

import { formatDate, getRandomInt } from "../../utils/util";// components/stars/stars.ts
Component({lifetimes: {attached() {this.createSelectorQuery().select("#myCanvas2").fields({node: true,size: true}).exec(res => this.init(res));},},/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {click: [{ startTime: Date.now(), img: '', fd: getRandomInt(-3, 3), c: getRandomInt(100, 200) }]},/*** 组件的方法列表*/methods: {handleAdd() {this.data.click.push({ startTime: Date.now(), img: '', fd: getRandomInt(-3, 3), c: getRandomInt(0, 200) })},init(res) {const width = res[0].widthconst height = res[0].height// 设置画布宽高const canvas = res[0].nodeconst ctx = canvas.getContext('2d')canvas.width = widthcanvas.height = height// 帧渲染回调const draw = () => {const w = 40const time = Date.now()this.data.click = this.data.click.map((item, index) => {// 计算经过的时间const elapsed = time - item.startTime// 计算动画位置const n = Math.floor(elapsed / 3000)const m = elapsed % 3000const dy = m / 1500const bl = 1 - dy / 3const y = height - (height) * dy / 2// -2 随机生成 dy如何确定呢const x = item.fd * Math.sin(dy * Math.PI / 4) * (width - w * bl) / 2 + (width - w * bl) / 2return { ...item, x, y, bl, w, n }})this.data.click = this.data.click.filter(item => {if (item.y < 5) {return false}return true})this.render(ctx, width, height, this.data.click)// 注册下一帧渲染canvas.requestAnimationFrame(draw)}draw()},render(ctx, width, height, click) {ctx.clearRect(0, 0, width, height)// 渲染for (let i = 0; i < click.length; i++) {if (!this.data.click[i]) continue;const { x, y, bl, w, c } = this.data.click[i]ctx.fillStyle = 'rgba(' + c + ', 0, 0,' + bl + ')';ctx.fillRect(x, y, w * bl, w * bl);}}}
})

 替换图片

import { formatDate, getRandomInt } from "../../utils/util";
import { defaultIcon } from '../../pages/clockIn/defaultImg'
let imgsList: any = []// components/stars/stars.ts
Component({lifetimes: {attached() {this.createSelectorQuery().select("#myCanvas2").fields({node: true,size: true}).exec(res => this.init(res));},},/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {click: [{ startTime: Date.now(), img: '', fd: getRandomInt(-3, 3), c: getRandomInt(100, 200) }]},/*** 组件的方法列表*/methods: {handleAdd() {this.data.click.push({ startTime: Date.now(), img: imgsList[getRandomInt(0, imgsList.length - 1)], fd: getRandomInt(-3, 3), c: getRandomInt(0, 200) })},init(res) {const width = res[0].widthconst height = res[0].height// 设置画布宽高const canvas = res[0].nodeconst ctx = canvas.getContext('2d')canvas.width = widthcanvas.height = height// 加载图片资源let imgKeys = Object.keys(defaultIcon)for (let k of imgKeys) {const image = canvas.createImage()image.onload = () => {imgsList.push(image)// ctx.drawImage(image, 0, 0, 40,40)console.log(imgsList.length)}image.src = defaultIcon[k]}// 帧渲染回调const draw = () => {const w = 40const time = Date.now()this.data.click = this.data.click.map((item, index) => {// 计算经过的时间const elapsed = time - item.startTime// 计算动画位置const n = Math.floor(elapsed / 3000)const m = elapsed % 3000const dy = m / 1500const bl = (1 - dy / 3) * 2const y = height - (height) * dy / 2// -2 随机生成 dy如何确定呢const x = item.fd * Math.sin(dy * Math.PI / 4) * (width - w / bl) / 2 + (width - w / bl) / 2return { ...item, x, y, bl, w, n }})this.data.click = this.data.click.filter(item => {if (item.y < 5) {return false}return true})this.render(ctx, width, height, this.data.click)// 注册下一帧渲染canvas.requestAnimationFrame(draw)}draw()},render(ctx, width, height, click) {ctx.clearRect(0, 0, width, height)// 渲染for (let i = 0; i < click.length; i++) {if (!this.data.click[i]) continue;const { x, y, bl, w, c, img } = this.data.click[i]if (img) {ctx.drawImage(img, x, y, w / bl, w / bl)ctx.globalAlpha = bl}}},}
})
<!--components/stars/stars.wxml-->
<view class="conponent-stars flex-cloumn-center"><canvas type="2d" id="myCanvas2" style="width: 150px;height: 200px;"></canvas><view class="add" bind:tap="handleAdd"></view>
</view>

接下来的问题是canvas绘制的图片有锯齿,找了下解决办法:清晰多了

const dpr = wx.getSystemInfoSync().pixelRatio;canvas.width = width * dpr;canvas.height = height * dpr;ctx.scale(dpr, dpr);

由于找不到透明背景的切图,为了美观想给图片画个圆

目前只能加个边框,裁剪还不能多个同时裁剪

// 渲染for (let i = 0; i < click.length; i++) {if (!this.data.click[i]) continue;const { x, y, bl, w, c, img } = this.data.click[i]// ctx.fillStyle = 'rgba(' + c + ', 0, 0,' + bl + ')';// ctx.fillRect(x, y, w / (3 * bl), w / (3 * bl));if (img) {ctx.drawImage(img, x, y, w / bl, w / bl)ctx.globalAlpha = blctx.beginPath()ctx.arc(x + 0.5 * w / bl, y + 0.5 * w / bl, 20 / bl, 0, 2 * Math.PI)ctx.stroke()ctx.closePath()// ctx.clip()}}

点击效果可以查看小程序打卡模块

http://www.dtcms.com/wzjs/513366.html

相关文章:

  • 哪个汽车网站好搜外友链
  • 网站建设与管理上海交通大学做一个简单的网站需要多少钱
  • 哪个网站用织梦做的优化工具箱
  • 手机做网站的步骤百度商城app下载
  • 黑龙江省住房与城乡建设厅网站百度人工客服24小时电话
  • 顺义住房和城乡建设委员会网站企业网站建设服务
  • 甘肃做高端网站百度收录查询代码
  • 广州定制型网站建设网页设计论文
  • phpweb网站上传google本地搜索
  • 做国际贸易都用什么网站百度人工智能
  • asp企业网站模板下载关键词检索
  • 沈阳网站疫情防控专栏电商的推广方式有哪些
  • 做网站不搭建本地环境北仑seo排名优化技术
  • 长春市委网站山东做网站公司
  • 安卓中文开发工具seo研究中心培训机构
  • 广西八桂职教网官网免费网站seo
  • 重庆招标信息网官网安卓优化大师官方下载
  • 做网站产生的流量费怎么算怎么制作网站详细流程
  • 自己做返利网站是真的吗求职seo推荐
  • 网站如何做提交的报名表百度竞价推广方案范文
  • 做网站的图片的内存百度开户公司
  • 公司网站建设会计处理网推平台有哪些
  • 官方网站让第三方建设放心吗全网网站快速排名推广软件
  • 做网站设计赚钱吗关键词排名点击
  • 大型网站建设平台站长工具seo综合查询全面解析
  • 合肥网站建设哪家好网络营销比较好的企业
  • 网站开发域名日喀则网站seo
  • 长沙企业网站建立网络营销工资一般多少
  • 做任务刷单的网站是真的吗seo的优点和缺点
  • 做一个网站 如何盈利微信营销方案