微信小程序使用二次贝塞尔曲线画波浪
这两周做一个新的项目,人员比较紧张,除了需求和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) } })
以上就是本文的全部内容,希望对大家的学习有所帮助
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring Cloud Stream同一通道根据消息内容分发不同的消费逻辑
应用场景 有的时候,我们对于同一通道中的消息处理,会通过判断头信息或者消息内容来做一些差异化处理,比如:可能在消息头信息中带入消息版本号,然后通过if判断来执行不同的处理逻辑,其代码结构可能是这样的: @StreamListener(value = TestTopic.INPUT) public void receiveV1(String payload, @Header("version") String version) { if("1.0".equals(version)) { // Version 1.0 } if("2.0".equals(version)) { // Version 2.0 } } 那么当消息处理逻辑复杂的时候,这段逻辑就会变得特别复杂。针对这个问题,在@StreamListener注解中提供了一个不错的属性condition,可以用来优化这样的处理结构。 动手试试 下面通过编写一个简单的例子来具体体会一下这个属性的用法: @EnableBinding(TestApplication.TestTopic.class) @SpringBootApplicati...
- 下一篇
解Bug之路-记一次中间件导致的慢SQL排查过程
解Bug之路-记一次中间件导致的慢SQL排查过程 前言 最近发现线上出现一个奇葩的问题,这问题让笔者定位了好长时间,期间排查问题的过程还是挺有意思的,正好博客也好久不更新了,就以此为素材写出了本篇文章。 Bug现场 我们的分库分表中间件在经过一年的沉淀之后,已经到了比较稳定的阶段。而且经过线上压测的检验,单台每秒能够执行1.7W条sql。但线上情况还是有出乎我们意料的情况。有一个业务线反映,每天有几条sql有长达十几秒的超时。而且sql是主键更新或主键查询,更奇怪的是出现超时的是不同的sql,似乎毫无规律可寻,如下图所示: 一个值得注意的点,就是此业务只有一部分流量走我们的中间件,另一部分还是直接走数据库的,而超时的sql只会在连中间件的时候出现,如下图所示: 很明显,是引入了中间件之后导致的问题。 排查是否sql确实慢 由于数据库中间件只关心sql,并没有记录对应应用的traceId,所以很难将对应的请求和sql对应起来。在这里,我们先粗略的统计了在应用端超时的sql的类型是否会有超时的情况。 分析了日志,发现那段时间所有的sql在往后端数据执行的时候都只有0.5ms,非常的快。如下...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范