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


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 相关文章推荐
JQuery 控制内容长度超出规定长度显示省略号
May 23 Javascript
node.js中的fs.lstatSync方法使用说明
Dec 16 Javascript
jQuery中:animated选择器用法实例
Dec 29 Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 Javascript
JQuery中两个ul标签的li互相移动实现方法
May 18 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
JS数组合并push与concat区别分析
Dec 17 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
Angular实现的简单查询天气预报功能示例
Dec 27 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
Mar 02 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Python编写检测数据库SA用户的方法
2014/07/11 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
用Python实现KNN分类算法
2017/12/22 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
python中count函数简单用法
2020/01/05 Python
python实现交并比IOU教程
2020/04/16 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
施工资料员的岗位职责
2013/12/22 职场文书
澳大利亚商务邀请函
2014/01/17 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2015年妇女工作总结
2015/05/14 职场文书
横空出世观后感
2015/06/09 职场文书
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS