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


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 相关文章推荐
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
Jan 16 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
Sep 03 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
Mar 04 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
jQuery实现页面顶部下拉广告
Dec 30 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
Vue使用.sync 实现父子组件的双向绑定数据问题
Apr 04 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
Oct 08 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中,文件上传
2006/12/06 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
jquery实现的图片点击滚动效果
2014/04/29 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
python3.6数独问题的解决
2019/01/21 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
安全资金保障制度
2014/01/23 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年体育工作总结
2014/11/24 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
陕西导游词
2015/02/04 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
Python竟然能剪辑视频
2021/05/25 Python
Python软件包安装的三种常见方法
2022/07/07 Python