【微信小程序之画布】三:手指触摸绘画椭圆

微信小程序开发交流qq群   173683895

   承接微信小程序开发。扫码加微信。

正文:

功能:根据手指触摸绘画一个椭圆路径--> 起点为手指开始触摸时的坐标,终点为手指触摸结束时的坐标

效果图:

组件属性的描述在上一节中描述过了,这里不再赘述。

<canvas class='myCanvas' canvas-id="myCanvas" bindtouchstart='EventHandleStart' bindtouchend='EventHandle' binderror="canvasIdErrorCallback" />
.myCanvas{
  border: 1px solid;
  margin: 0 auto;
}

本节重点在 bezierCurveTo  -->创建三次方贝塞尔曲线路径。在最下方会有详细描述

var my_carvas,strat_x,strat_y,end_x,end_y;

Page({
  data: {},
  onLoad: function () {},
  onReady:function(){
    my_carvas = wx.createCanvasContext('myCanvas', this) //1.创建carvas实例对象,方便后续使用。
  },
  // 手指触摸事件
  EventHandleStart:function(e){
    console.log(e)
    strat_x = e.touches[0].x; // 手指开始触摸时的x轴 x轴--->相对于画布左边的距离
    strat_y = e.touches[0].y;// 手指开始触摸时的y轴 y轴--->相对于画布顶部的距离
  },
  //手指触摸结束时的事件
  EventHandle: function (e) {
    console.log(e)
    end_x = e.changedTouches[0].x; // 手指结束触摸时的x轴 x轴--->相对于画布左边的距离
    end_y = e.changedTouches[0].y;// 手指结束触摸时的y轴 y轴--->相对于画布顶部的距离
    my_carvas.beginPath(); //创建一条路径  
    my_carvas.setStrokeStyle('red');  //设置边框为红色
    my_carvas.moveTo(strat_x,strat_y) //描述路径的起点为手指触摸的x轴和y轴
    
    my_carvas.bezierCurveTo(strat_x, strat_y + 20, end_x, end_y + 20, end_x, end_y) 
    my_carvas.moveTo(strat_x, strat_y); //描述路径的起点为手指触摸的x轴和y轴
    my_carvas.bezierCurveTo(strat_x, strat_y - 20, end_x, end_y - 20, end_x, end_y)

    my_carvas.stroke() //画出当前路径的边框
    my_carvas.draw() //将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。
  }

})

 

官方文档 bezierCurveTo 是这么描述的:

 

 

参数

参数类型说明
cp1xNumber第一个贝塞尔控制点的 x 坐标
cp1yNumber第一个贝塞尔控制点的 y 坐标
cp2xNumber第二个贝塞尔控制点的 x 坐标
cp2yNumber第二个贝塞尔控制点的 y 坐标
xNumber结束点的 x 坐标
yNumber结束点的 y 坐标

 

 

 

针对 moveTo(20, 20) bezierCurveTo(20, 100, 200, 100, 200, 20) 的三个关键坐标如下:

  • 红色:起始点(20, 20)
  • 蓝色:两个控制点(20, 100) (200, 100)
  • 绿色:终止点(200, 20)

我对 bezierCurveTo 的理解:

1.通过 bezierCurveTo 可以画出一条两端对称的弧线;

2.前四个数分别是左边和右边的坐标

3.可以确定的是第一个蓝点的X坐标和第二个蓝点的X坐标分别对应的是起点和终点的X坐标

4.那么还有最后的两个点,也就是官方描述中的两个100,它们为什么要是100呢? 我们应该这样理解它们。它们分别应该是起点的Y坐标和终点的Y坐标往上或者往下的弧度。 例如我文中写的 起点坐标+20 和终点坐标+20,含义就是往上弧度为20.这个值可以根据你的需求调整。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a_靖

对你有帮助吗?打赏鼓励一下?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值