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


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 相关文章推荐
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 Javascript
js构造函数、索引数组和属性的实现方式和使用
Nov 16 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
javascript实现禁止复制网页内容汇总
Dec 30 Javascript
深入浅出 jQuery中的事件机制
Aug 23 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
Oct 30 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
Jan 05 Javascript
js校验开始时间和结束时间
May 26 Javascript
JS绘图Flot如何实现可选显示曲线图功能
Oct 16 Javascript
小程序自定义圆形进度条
Nov 17 Javascript
深入详解JS函数的柯里化
Jun 09 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 define()函数以及defined()函数的用法详解
2013/06/05 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
Python脚本实现自动发带图的微博
2016/04/27 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
Django框架封装外部函数示例
2019/05/28 Python
python实现数据分析与建模
2019/07/11 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
物业保安主管岗位职责
2013/12/25 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
大学迎新标语
2014/06/26 职场文书
党委领导班子整改方案
2014/09/30 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js