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


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 相关文章推荐
javascript 添加和移除函数的通用方法
Oct 20 Javascript
关于query Javascript CSS Selector engine
Apr 12 Javascript
javascript获取所有同类checkbox选项(实例代码)
Nov 07 Javascript
Jquery操作radio的简单实例
Jan 06 Javascript
基于Jquery实现键盘按键监听
May 11 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
Aug 15 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
js提交form表单,并传递参数的实现方法
May 25 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 Javascript
微信小程序实现滚动Tab选项卡
Nov 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
用Python写冒泡排序代码
2016/04/12 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
保安队长职务说明书
2014/02/23 职场文书
中药学自荐信
2014/06/15 职场文书
员工生日活动方案
2014/08/24 职场文书
公证委托书标准格式
2014/09/11 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
年终工作总结范文2014
2014/11/27 职场文书
2015年企业新年寄语
2014/12/08 职场文书