微信小程序_(组件)canvas画布
canvas画布效果 官方文档:传送门
Page({
canvasIdErrorCallback: function (e) {
console.error(e.detail.errMsg)
},
onReady: function (e) {
// 使用 wx.createContext 获取绘图上下文 context
var context = wx.createCanvasContext('firstCanvas') //设置画笔的颜色
context.setStrokeStyle("#00ff00")
//设置线宽为5个像素
context.setLineWidth(5)
//左上角坐标(0,0)长宽200
context.rect(0, 0, 200, 200)
//对上面定义动作进行绘制
context.stroke() context.setStrokeStyle("#ff0000") context.setLineWidth(2)
//移动画笔的位置到(160,100)
context.moveTo(160, 100)
//左上角坐标(100,100),半径为60,起始角度0°,终止角度2π,顺时针绘制
context.arc(100, 100, 60, 0, 2 * Math.PI, false)
context.moveTo(140, 100)
context.arc(100, 100, 40, 0, Math.PI, false)
context.moveTo(85, 80)
context.arc(80, 80, 5, 0, 2 * Math.PI, true)
context.moveTo(125, 80)
context.arc(120, 80, 5, 0, 2 * Math.PI, true)
context.stroke()
context.draw()
}
})
text.js
Gary 微信小程序
<view><canvas style="width: 300px; height: 400px; background:blue;" canvas-id="firstCanvas"></canvas>
</view>
text.wxml
{
"pages":[
"pages/test/test",
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
}
app.json
实现过程
canvas-id canvas 组件的唯一标识符
同一页面中的 canvas-id 不可重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的画布将被隐藏并不再正常工作
定义画布样式
<view><canvas style="width: 300px; height: 400px; background:blue;" canvas-id="firstCanvas"></canvas>
</view>
在JS中添加onReady: function()函数(dom加载完成后执行的函数)
绘制矩形
//设置画笔的颜色
context.setStrokeStyle("#00ff00")
//设置线宽为5个像素
context.setLineWidth(5)
//左上角坐标(0,0)长宽200
context.rect(0, 0, 200, 200)
//对上面定义动作进行绘制
context.stroke()
绘制四个圆
context.setStrokeStyle("#ff0000") context.setLineWidth(2)
//移动画笔的位置到(160,100)
context.moveTo(160, 100)
//坐标原点(100,100),半径为60,起始角度0°,终止角度2π,顺时针绘制
context.arc(100, 100, 60, 0, 2 * Math.PI, false)
context.moveTo(140, 100)
context.arc(100, 100, 40, 0, Math.PI, false)
context.moveTo(85, 80)
context.arc(80, 80, 5, 0, 2 * Math.PI, true)
context.moveTo(125, 80)
context.arc(120, 80, 5, 0, 2 * Math.PI, true)
context.stroke()
context.draw()
context.arc(100, 100, 60, 0, 2 * Math.PI, false)
第六个参数,当参数为true时画笔顺时针绘制,为false时逆时针绘制
绘制移动的图形效果
Page({
canvasIdErrorCallback: function (e) {
console.error(e.detail.errMsg)
}, pos:{
x:0,
y:0
}, onReady: function (e) {
this.draw()
}, btnclick:function(){
setInterval(this.draw,10)
}, draw:function(){ this.pos.x++;
this.pos.y++;
// 使用 wx.createContext 获取绘图上下文 context
var context = wx.createCanvasContext('firstCanvas') //左上角坐标(100,100),半径为60,起始角度0°,终止角度2π,顺时针绘制
context.arc(this.pos.x, this.pos.y, 60, 0, 2 * Math.PI, false) context.stroke()
context.draw()
}
})
test.js
Gary 微信小程序
<view><canvas style="width: 300px; height: 400px; background:blue;" canvas-id="firstCanvas"
bindtouchstart="btnclick"></canvas>
</view>
text.wxml
{
"pages":[
"pages/test/test",
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
}
app.json
实现过程
在text.wxml中绑定手指点击事件bindtouchstart="btnclick"
bindtouchstart 手指触摸动作开始
bindtouchmove 手指触摸后移动
bindtouchend 手指触摸动作结束
bindtouchcancel 手指触摸动作被打断,如来电提醒,弹窗
bindlongtap 手指长按 500ms 之后触发,触发了长按事件后进行移动不会触发屏幕的滚动
binderror 当发生错误时触发 error 事件,detail = {errMsg: 'something wrong'}
手指触碰属性名
初始化图形坐标原点
pos:{
x:0,
y:0
},
当dom加载完成后执行绘画动作draw()
onReady: function (e) {
this.draw()
},
添加draw()绘画动作
draw:function(){ this.pos.x++;
this.pos.y++;
// 使用 wx.createContext 获取绘图上下文 context
var context = wx.createCanvasContext('firstCanvas') //左上角坐标(100,100),半径为60,起始角度0°,终止角度2π,顺时针绘制
context.arc(this.pos.x, this.pos.y, 60, 0, 2 * Math.PI, false) context.stroke()
context.draw()
}
手指触摸动作后图形坐标每隔10ms进行x++,y++方向移动(设置事件间隔对图形进行重绘制)
btnclick:function(){
setInterval(this.draw,10)
},
微信小程序_(组件)canvas画布的更多相关文章
- 微信小程序_(组件)icon、text、rich-text、progress四大基础组件
微信小程序基础组件官方文档 传送门 Learn 一.icon图标组件 二.rich-text富文本组件 三.text文本组件 四.progress进度条组件 一.icon图标组件 type:icon的 ...
- 微信小程序_(组件)可拖动movable-view
微信小程序movable-view组件官方文档 传送门 Learn 一.moveable-view组件 一.movable-view组件 direction:movable-view的移动方向,属性值 ...
- 微信小程序_(组件)scroll-view可滚动视图
微信小程序scroll-view组件官方文档 传送门 提前准备:使用<view>组件制作五条撑满的横向区域 <!--index.wxml--> Cynical丶Gary < ...
- 微信小程序_(组件)view视图容器
微信小程序view组件官方文档 传送门 Learn 一.hover-class属性 二.hover-start-time与hover-stay-time属性 三.hover-stop-propagat ...
- 微信小程序 base64 图片 canvas 画布 drawImage 实现
在微信小程序中 canvas drawImage API 传入的第一个参数是 imageResource 图片资源路径,这个参数通常由从相册选择图片 wx.chooseImage 或 wx.getIm ...
- 微信小程序_(组件)swiper轮播图
微信小程序swiper轮播图组件官方文档 传送门 Learn: swiper组件 一.swiper组件 indicator-dots:是否显示面板指示点[默认值false] autoplay:是否自动 ...
- 微信小程序_(组件)picker
picker组件效果 官方文档:传送门 Page({ data: { array: ['美国', '中国', '巴西', '日本'], objectArray: [ { id: 0, name: '美 ...
- 微信小程序_(组件)组件基础
(progress.text.block) 组件基础效果 官方文档:传送门 Page({ /** * 页面的初始数据 */ data: { text:"Gary 微信小程序\n", ...
- 微信小程序_(组件)flex布局
小程序建议使用flex布局进行排版 flex是一个盒装弹性布局 flex是一个容器,所有子元素都是他的成员 定义布局:display:flex flex容器的属性: 一.flex-direction: ...
随机推荐
- python-优酷系统管理员视图粗糙版(无详细注释)
目录 Tank-YouKu(仅管理员功能粗糙版) 优酷系统管理员视图功能 前期准备 创库创表语句 安装pymysql模块 安装DBUtils模块 配置 db_pool 项目架构与数据流向 目录结构 s ...
- react生态常用库分类
一. web项目 1.脚手架 create-react-app 自动安装react.react-dom 2.核心 react.react-dom 3.路由 react-router.react-rou ...
- 【Tomcat】热部署的遗留配置导致服务器无法启动
1.问题描述: 今天用myeclipse写了个小demo,然后用Tomcat7 部署了,接着点击启动服务器,服务器居然报错: 严重: Error starting static Resources j ...
- MySQL性能优化(三):索引
原文:MySQL性能优化(三):索引 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbi ...
- Dapper多表查询时子表字段为空
最近在学习使用Dapper时百度了一篇详细使用教程,在做到多表查询的时候,出现如下情况. 使用的SQL如下, SELECT * FROM [Student] AS A INNER JOIN [Juni ...
- C# using用法之一(命名空间相关)
通过using关键字可以引入命名空间 using System; using System.Collections.Generic; using System.Linq; using System.T ...
- python 字符串前面加r,u的含义
u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u:但是中文, ...
- 16 Scrapy之分布式爬虫
redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls ...
- Slimvoice能代替JavaScript?
对于Slimvoice(https://slimvoice.co/),我想反对JavaScript的炒作,并对整个应用程序进行服务器端渲染.您可能会说:“用户必须在使用应用程序时重新加载每个页面,这必 ...
- 关于获取某月某日最后一天时Calendar的cal.getActualMaximum(Calendar.DAY_OF_MONTH)的吐槽
例如: 在2017.03.29-31号 新建一个Calendar的単例 设置年:2017 设置月:2 int day = cal.getActualMaximum(Calendar.DAY_OF_MO ...