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


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类的封装及实现代码
Dec 02 Javascript
基于JQuery的cookie插件
Apr 07 Javascript
用js读、写、删除Cookie代码续篇
Dec 03 Javascript
浅谈js 闭包引起的内存泄露问题
Jun 22 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
Dec 04 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
利用VUE框架,实现列表分页功能示例代码
Jan 12 Javascript
微信小程序 页面传值详解
Mar 10 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
Nov 26 Javascript
详细分析React 表单与事件
Jul 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+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
js继承的实现代码
2010/08/05 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python读写Excel文件的实例
2013/11/01 Python
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
Python函数调用追踪实现代码
2020/11/27 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
营销与策划专业毕业生求职信
2013/11/01 职场文书
财务会计自荐信范文
2014/02/21 职场文书
2014年变电站工作总结
2014/12/19 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
社区活动总结范文
2015/05/07 职场文书