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画布的更多相关文章

  1. 微信小程序_(组件)icon、text、rich-text、progress四大基础组件

    微信小程序基础组件官方文档 传送门 Learn 一.icon图标组件 二.rich-text富文本组件 三.text文本组件 四.progress进度条组件 一.icon图标组件 type:icon的 ...

  2. 微信小程序_(组件)可拖动movable-view

    微信小程序movable-view组件官方文档 传送门 Learn 一.moveable-view组件 一.movable-view组件 direction:movable-view的移动方向,属性值 ...

  3. 微信小程序_(组件)scroll-view可滚动视图

    微信小程序scroll-view组件官方文档 传送门 提前准备:使用<view>组件制作五条撑满的横向区域 <!--index.wxml--> Cynical丶Gary < ...

  4. 微信小程序_(组件)view视图容器

    微信小程序view组件官方文档 传送门 Learn 一.hover-class属性 二.hover-start-time与hover-stay-time属性 三.hover-stop-propagat ...

  5. 微信小程序 base64 图片 canvas 画布 drawImage 实现

    在微信小程序中 canvas drawImage API 传入的第一个参数是 imageResource 图片资源路径,这个参数通常由从相册选择图片 wx.chooseImage 或 wx.getIm ...

  6. 微信小程序_(组件)swiper轮播图

    微信小程序swiper轮播图组件官方文档 传送门 Learn: swiper组件 一.swiper组件 indicator-dots:是否显示面板指示点[默认值false] autoplay:是否自动 ...

  7. 微信小程序_(组件)picker

    picker组件效果 官方文档:传送门 Page({ data: { array: ['美国', '中国', '巴西', '日本'], objectArray: [ { id: 0, name: '美 ...

  8. 微信小程序_(组件)组件基础

    (progress.text.block) 组件基础效果 官方文档:传送门 Page({ /** * 页面的初始数据 */ data: { text:"Gary 微信小程序\n", ...

  9. 微信小程序_(组件)flex布局

    小程序建议使用flex布局进行排版 flex是一个盒装弹性布局 flex是一个容器,所有子元素都是他的成员 定义布局:display:flex flex容器的属性: 一.flex-direction: ...

随机推荐

  1. 移除django的旧版本

    移除django的旧版本 下面这一段代码打进去绝对能看到你想要的,根据这个路径去找版本文件夹,他的名字应该是django.2xx.xxx很长一段,请你删了它! import django import ...

  2. Ruby学习中(哈希变量/python的字典, 简单的类型转换)

    一. 哈希变量(相当于Python中的字典) 详情参看:https://www.runoob.com/ruby/ruby-hash.html 1.值得注意的 (1). 创建Hash时需注意 # 创建一 ...

  3. sql server len函数

    len函数 --返回字符表达式中的字符数 --如果字符串中包含前导空格和尾随空格,则函数将它们包含在内 --LEN对相同的单字节和双字节字符串返回相同的值 --示例:select LEN('no'), ...

  4. C++参数传递与STL

    C++参数传递与STL 这是一篇备忘录形式的内容,涉及到的内容比较基础 今天写了一个小算法,用一个set在函数间传递,记录各个函数中的结果.但是最后结果显示set中的元素是0个.查了一下才发现,用来C ...

  5. Pornhub Web 开发者访谈

    原文:Interview with a Pornhub Web Developer 译者:neal1991 welcome to star my articles-translator, provid ...

  6. day3-3种实现小图标与文字水平对齐的方式

    效果图: 1.使用小图标作为背景图实现 html: <div class="test"> <ul> <li class="method1&q ...

  7. CSS media queries 媒体查询

    最近在做一些页面打印时的特殊处理接触到了media queries,想系统学习一下,在MOZILLA DEVELOPER NETWORK看到一篇文章讲的很不错,结合自己的使用总结一下. CSS2/me ...

  8. 关于gitlab+jenkins自动部署代码的实现

    本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...

  9. poj 1007 DNA sorting (qsort)

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 95209   Accepted: 38311 Des ...

  10. flume--为搬砖而生,日志传输的一把好手

    (一)flume的产生 为什么会有flume 随着互联网的发展,人们对网络日志产生的信息也越来越重视.不仅如此,我们的服务器,比如Nginx,每天都会产生大量的日志.我们要将这些日志收集到指定的地方, ...