麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 小程序 > 正文

小程序二次貝塞爾曲線實現購物車商品曲線飛入效果

2020-03-21 16:03:40
字體:
來源:轉載
供稿:網友

前段時間閑暇的時候看到一個貝塞爾曲線算法的文章,試著在小程序里去實現小程序的貝塞爾曲線算法,及其效果。

主要應用到的技術點:
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地址:https://github.com/xiongchenf/flybus.git

調用方法和用法就不占篇幅了,都是基礎的東西。效果圖如下:

小程序,貝塞爾曲線,購物車

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美片a| 国语自产免费精品视频在 | 蜜桃视频在线观看免费 | 福利在线免费 | 成人毛片网 | 美国av片在线观看 | 久久久久国产成人精品亚洲午夜 | 天天操天天碰 | av在线免费网 | 国产亚洲精品久久久久久网站 | 国产jjizz一区二区三区视频 | www.mitao | 国产99久久精品一区二区300 | 国产精品久久久久久久久久了 | 中文欧美日韩 | 午夜精品福利视频 | 久久久久久久免费视频 | 成人免费网站在线观看 | 国产亚洲精久久久久久蜜臀 | 涩涩屋av| 国产一级www | 欧美乱淫 | 欧美jizzhd极品欧美 | 欧美精品免费一区二区三区 | 美女av在线免费观看 | 日韩精品| 欧美日韩成人一区二区 | 久久777国产线看观看精品 | 一边吃奶一边插下面 | 国产精品无码久久久久 | 国产精品久久久久久久久久三级 | 嫩草91在线 | 亚洲综合91 | 欧美成人免费香蕉 | 免费看成年人视频在线 | 麻豆自拍偷拍视频 | 国产三级精品最新在线 | 伊人成人免费视频 | 桥本有菜免费av一区二区三区 | 国产亚洲精品综合一区91 | 一夜新娘第三季免费观看 |