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


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 hasOwnProperty 方法 &amp; in 关键字
Nov 26 Javascript
jQuery DIV弹出效果实现代码
Jul 03 Javascript
js实现拉伸拖动iframe的具体代码
Aug 03 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
Oct 23 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
Jul 12 Javascript
javascript事件的传播基础实例讲解(35)
Feb 14 Javascript
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
Sep 18 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
jQuery动态生成的元素绑定事件操作实例分析
May 04 jQuery
微信小程序开发问题之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 301转向实现代码
2008/09/18 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
移动端js图片查看器
2016/11/17 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Python实现动态循环输出文字功能
2020/05/07 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
好习惯伴我成长演讲稿
2014/05/21 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
Ajax实现异步加载数据
2021/11/17 Javascript
讨论nginx location 顺序问题
2022/05/30 Servers
Redis过期数据是否会被立马删除
2022/07/23 Redis