前段时间闲暇的时候看到一个贝塞尔曲线算法的文章,试着在小程序里去实现小程序的贝塞尔曲线算法,及其效果。

主要应用到的技术点:

1、小程序wxss布局,以及数据绑定

2、js二次bezier曲线算法

核心算法,写在app.js里


bezier: function (points, times) {// 0、以3个控制点为例,点A,B,C,AB上设置点D,BC上设置点E,DE连线上设置点F,则最终的贝塞尔曲线是点F的坐标轨迹。// 1、计算相邻控制点间距。// 2、根据完成时间,计算每次执行时D在AB方向上移动的距离,E在BC方向上移动的距离。// 3、时间每递增100ms,则D,E在指定方向上发生位移, F在DE上的位移则可通过AD/AB = DF/DE得出。// 4、根据DE的正余弦值和DE的值计算出F的坐标。// 邻控制AB点间距var bezier_points = [];var points_D = [];var points_E = [];const DIST_AB = Math.sqrt(Math.pow(points[1]['x'] - points[0]['x'], 2) + Math.pow(points[1]['y'] - points[0]['y'], 2));// 邻控制BC点间距const DIST_BC = Math.sqrt(Math.pow(points[2]['x'] - points[1]['x'], 2) + Math.pow(points[2]['y'] - points[1]['y'], 2));// D每次在AB方向上移动的距离const EACH_MOVE_AD = DIST_AB / times;// E每次在BC方向上移动的距离 const EACH_MOVE_BE = DIST_BC / times;// 点AB的正切const TAN_AB = (points[1]['y'] - points[0]['y']) / (points[1]['x'] - points[0]['x']);// 点BC的正切const TAN_BC = (points[2]['y'] - points[1]['y']) / (points[2]['x'] - points[1]['x']);// 点AB的弧度值const RADIUS_AB = Math.atan(TAN_AB);// 点BC的弧度值const RADIUS_BC = Math.atan(TAN_BC);// 每次执行for (var i = 1; i <= times; i++) {// AD的距离var dist_AD = EACH_MOVE_AD * i;// BE的距离var dist_BE = EACH_MOVE_BE * i;// D点的坐标var point_D = {};point_D['x'] = dist_AD * Math.cos(RADIUS_AB) + points[0]['x'];point_D['y'] = dist_AD * Math.sin(RADIUS_AB) + points[0]['y'];points_D.push(point_D);// E点的坐标var point_E = {};point_E['x'] = dist_BE * Math.cos(RADIUS_BC) + points[1]['x'];point_E['y'] = dist_BE * Math.sin(RADIUS_BC) + points[1]['y'];points_E.push(point_E);// 此时线段DE的正切值var tan_DE = (point_E['y'] - point_D['y']) / (point_E['x'] - point_D['x']);// tan_DE的弧度值var radius_DE = Math.atan(tan_DE);// 地市DE的间距var dist_DE = Math.sqrt(Math.pow((point_E['x'] - point_D['x']), 2) + Math.pow((point_E['y'] - point_D['y']), 2));// 此时DF的距离var dist_DF = (dist_AD / DIST_AB) * dist_DE;// 此时DF点的坐标var point_F = {};point_F['x'] = dist_DF * Math.cos(radius_DE) + point_D['x'];point_F['y'] = dist_DF * Math.sin(radius_DE) + point_D['y'];bezier_points.push(point_F);}return {'bezier_points': bezier_points};}

注释很详细,算法的原理其实也很简单。 源码也发出来吧,github地址:github.com/xiongchenf/…

调用方法和用法就不占篇幅了,都是基础的东西。效果图如下:

作者:熊晨沣
原文地址:本文发布于小程序社区(wxapp-union.com)转载请注明出处,谢谢!

小程序二次贝塞尔曲线,购物车商品曲线飞入效果相关推荐

  1. 小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈

    小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈 一.概述 需要用到的生成二维码组件(可自行下载添加到小程序根目录utils里):https://github.com/demi52 ...

  2. node 无脑生成小程序二维码图

    RT 新建createwxaqrcode.js: const request = require('request') const fs = require('fs')// eg:生成购物车列表圆形二 ...

  3. 【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)

    可在系列教程的基础上继续开发,也可以单独使用 [微信小程序-原生开发]系列教程 效果预览 代码实现 点击触发生成海报 在活动详情页,指定点击某图标/按钮,触发跳转到生成海报的页面 pages\comp ...

  4. 小程序实践(六)--- 购物车

    小程序实践(六)- 购物车 今天分享一下购物车功能实现思路,首先购物车是离不开checkbox,而不同的框架封装了不同的api,今天分享的就是小程序的checkbox是怎么实现购物车的功能的. 我们在 ...

  5. 获取小程序二维码携带的参数

    小程序获取二维码参数 生成二维码的时候使用的是 wxacode.getUnlimited,接口 B(数量不受限制,参数较短) 文档的截图如下: 可以看到生成的二维码的参数需要放在 scene 中 假设 ...

  6. 实现微信小程序和支付宝小程序二维码合并

    实现微信小程序和支付宝小程序二维码合并,这样用户就可以通过同一个二维码进入微信或者支付宝啦 1.需要准备可以通过公网访问的服务器 2.微信小程序 打开微信小程序后台->开发(左边)->开发 ...

  7. 微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据

    1.生成二维码 在小程序开发中,经常需要用到通过分享小程序二维码,进行扫码进入小程序. 官方文档 生成小程序二维码接口,这个生成接口可以放置服务器使用. page:是扫码之后需要打开的小程序页面 sc ...

  8. 微信小程序canva生成图片,长按图片识别小程序二维码详解

    下面这个图片就是通过图片和文字等内容合成的一张带有微信小程序二维码的图片,在小程序内部长按可以识别出来: 基本思路是先将内容用canvas排好版,然后把该canvas转化成图片:图片利用wx.prev ...

  9. PC端生成小程序二维码海报并下载

    我采用了前端截屏+前端生成二维码的方法展示海报并下载 上代码 //截屏组件 import html2canvas from 'html2canvas' //生成二维码组件 import QRCode ...

最新文章

  1. php之判断点在多边形内的api
  2. 计算机网络 tcp 阻塞,读书笔记:计算机网络第7章:阻塞控制
  3. 首航节能:光热行业刚起步 子公司处于亏损状态
  4. 用触发器实现SQLite的外键约束
  5. IIS7下使用urlrewriter.dll配置
  6. 相量除法能用计算机吗,电路相量的加减乘除运算
  7. java集合源码分析之HashMap
  8. 关于PHP的工作流引擎
  9. 数据切分——Mysql分区表的建立及性能分析
  10. 苹果ipad服务器无响应怎么办,苹果iPad死机怎么办?几种处理iPad使用过程中死机的方法...
  11. 2022-2028年中国手机银行行业市场竞争态势及未来前景分析报告
  12. Android 开发笔记 “android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 ”
  13. 初识C语言:IDE的选择与使用【C语言】
  14. 2023杭州之江中复百日誓师动员大会
  15. 累加器使用的注意点及自定义累加器
  16. Pivotal Gemfire gfsh shell的使用(2)
  17. 聊聊云原生时代湖仓一体建设
  18. tomcat布置前端项目
  19. springboot Elasticsearch 配置 Demo
  20. HCIE-storage-lab 考试注意事项,实验考试细节及问题等

热门文章

  1. iOS开发 - OC - PCH文件使用
  2. 演练:创建和注册自定义 HTTP 模块
  3. IOS学习之 网络编程(10)--简单介绍ASI框架的使用
  4. 安装Pod时提示ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod...
  5. htm、html、shtml网页区别
  6. Java学习_day008面向对象(OOP):对象和类
  7. 华为鸿蒙王者荣耀视频,王者荣耀鸿蒙2.0版
  8. linux mysql 日志乱码_Linux下MySQL保存进去数据为乱码的解决办法
  9. Swift3.0语言教程使用指针创建和初始化字符串
  10. Unity中制作游戏的快照游戏支持玩家拍快照