二次贝塞尔曲线 java_微信小程序使用二次贝塞尔曲线画波浪

这两周做一个新的项目,人员比较紧张,除了需求和UI,前端后端一个人来干。

在项目需求确定后,UI隔了几天设计出了UI界面,拿到UI效果图后见有一个界面有波浪效果的我当时就蒙圈了,这都啥玩意啊?转念想到了最近在IT圈挺火的那个事件:产品要求安卓程序员实现根据用户手机壳颜色自动更换APP主题的需求后,顿时觉得画个波浪这个压根就不是事啊。

二次贝塞尔曲线

画波浪

思路:

在屏幕左边画一个波,然后让它一直向屏幕右边平移过去。其X的值由负数变为正数依次增大;然后一直重复此操作。

我画出来的波浪如下(感觉还是有那么一点波浪的感觉):

052f55565890ace04b4b402303b9412f.gif

界面代码为(index.wxml):

JS代码为(index.js):

Page({

onReady: function() {

this.position = {

x: 150,

y: 150,

vx: 2,

vy: 2

},

this.obj = {

offset: 0,

baseLine: 40,

direction: 1,

waveDirection: 1

},

// var offset = 5

this.drawQuadraticCurve3()

this.interval = setInterval(this.drawQuadraticCurve3, 1)

console.log(">>>>>>>>>" + this.obj.offset)

},

/**

* 画大波浪

*/

drawQuadraticCurve3: function() {

var obj = this.obj

var startX = 20,

itemWidth = 100,

offset = obj.offset,

baseLine = obj.baseLine,

waveHeight = 10,

direction = obj.direction,

waveDirection = obj.waveDirection

const ctx = wx.createCanvasContext('myCanvas3')

function getWaveHeigh(i) {

if (i % 2 == 0) {

// return baseLine + waveHeight

}

return baseLine - waveHeight

}

ctx.beginPath()

ctx.moveTo(-itemWidth * 6, baseLine)

ctx.setFillStyle('#4BF6EE')

for (var i = -6; i < 5; i++) {

startX = i * itemWidth;

var currentX = startX + (itemWidth / 2) + offset

var currentY = getWaveHeigh(i)

var currentEndX = startX + itemWidth + offset

ctx.quadraticCurveTo(currentEndX - 10,

currentY, currentEndX, baseLine)

ctx.stroke()

}

//填充海水

ctx.lineTo(0, 2000)

ctx.setFillStyle('#4BF6EE')

ctx.fill()

ctx.draw()

if (obj.waveDirection == 1) {

obj.offset = obj.offset + 1

} else if (obj.waveDirection == -1) {

obj.offset = obj.offset - 1

}

if (obj.offset == 400) {

obj.offset = 0

}

if (obj.offset == 50 || obj.offset == 1) {

// obj.waveDirection = obj.waveDirection * -1

}

// if (direction == 1) {

// obj.baseLine = obj.baseLine + 1

// } else if (direction == -1) {

// obj.baseLine = obj.baseLine - 1

// }

if (obj.baseLine >= 50 || obj.baseLine <= 40) {

console.log("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

//obj.direction = (obj.direction * -1)

}

},

onUnload: function() {

clearInterval(this.interval)

}

})

以上就是本文的全部内容,希望对大家的学习有所帮助

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值