fly-to-cart.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. export default function bezier(pots, amount) {
  2. var pot;
  3. var lines;
  4. var ret = [];
  5. var points;
  6. for (var i = 0; i <= amount; i++) {
  7. points = pots.slice(0);
  8. lines = [];
  9. while (pot = points.shift()) {
  10. if (points.length) {
  11. lines.push(pointLine([pot, points[0]], i / amount));
  12. } else if (lines.length > 1) {
  13. points = lines;
  14. lines = [];
  15. } else {
  16. break;
  17. }
  18. }
  19. ret.push(lines[0]);
  20. }
  21. function pointLine(points, rate) {
  22. var pointA, pointB, pointDistance, xDistance, yDistance, tan, radian, tmpPointDistance;
  23. var ret = [];
  24. pointA = points[0];//点击
  25. pointB = points[1];//中间
  26. xDistance = pointB.x - pointA.x;
  27. yDistance = pointB.y - pointA.y;
  28. pointDistance = Math.pow(Math.pow(xDistance, 2) + Math.pow(yDistance, 2), 1 / 2);
  29. tan = yDistance / xDistance;
  30. radian = Math.atan(tan);
  31. tmpPointDistance = pointDistance * rate;
  32. ret = {
  33. x: pointA.x + tmpPointDistance * Math.cos(radian),
  34. y: pointA.y + tmpPointDistance * Math.sin(radian)
  35. };
  36. return ret;
  37. }
  38. return ret
  39. }