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


Posted in Javascript onDecember 25, 2018

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

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

二次贝塞尔曲线

在微信官方的二次贝塞尔曲线画法连接

画波浪

思路:

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

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

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

界面代码为(index.wxml):

<view class="page-body">
 <view class="page-body-wrapper">
  <canvas canvas-id="myCanvas3" class="canvas3"></canvas>
 </view>
</view>

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)
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js滚动条多种样式,推荐
Feb 05 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
Dec 01 Javascript
ExtJS DOM元素操作经验分享
Aug 28 Javascript
jQuery中prepend()方法使用详解
Aug 11 Javascript
使用Javascript实现选择下拉菜单互移并排序
Feb 23 Javascript
一个例子轻松学会Vue.js
Jan 02 Javascript
浅谈angularjs依赖服务注入写法的注意点
Apr 24 Javascript
自定义vue全局组件use使用、vuex的使用详解
Jun 14 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
Jun 27 Javascript
JS监听滚动和id自动定位滚动
Dec 18 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 Javascript
微信小程序开发问题之wx.previewImage
Dec 25 #Javascript
微信小程序使用for循环动态渲染页面操作示例
Dec 25 #Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 #Javascript
使用gulp构建前端自动化的方法示例
Dec 25 #Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 #Javascript
详解vuex commit保存数据技巧
Dec 25 #Javascript
bootstrap table实现合并单元格效果
Dec 24 #Javascript
You might like
PHP实现打包下载文件的方法示例
2017/10/07 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
优秀老师事迹材料
2014/02/05 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
大学生逃课检讨书
2015/05/04 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS