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


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 相关文章推荐
ie 处理 gif动画 的onload 事件的一个 bug
Apr 12 Javascript
javascript 建设银行登陆键盘
Jun 10 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
Dec 10 Javascript
JavaScript字符串删除重复字符的方法
Dec 25 Javascript
seajs学习教程之基础篇
Oct 20 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
微信小程序 解析网页内容详解及实例
Feb 22 Javascript
jQuery EasyUI ProgressBar进度条组件
Feb 28 Javascript
Ionic项目中Native Camera的使用方法
Jun 07 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
JS实现普通轮播图特效
Jan 01 Javascript
微信小程序间使用navigator跳转传值问题实例分析
Mar 27 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中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
joomla数据库操作示例代码
2016/01/06 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
python语言的优势是什么
2020/06/17 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
网络教育自我鉴定
2013/11/01 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
毕业生就业意向书
2014/04/01 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
女方离婚起诉书
2015/05/18 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python
MySQL窗口函数的具体使用
2021/11/17 MySQL
灵能百分百第三季什么时候来?
2022/03/15 日漫
利用Python多线程实现图片下载器
2022/03/25 Python