/ext-4.1.0_b3/docs/source/CubicBezier.html

https://bitbucket.org/srogerf/javascript · HTML · 97 lines · 92 code · 5 blank · 0 comment · 0 complexity · 6b60c7950ec7a896c08d0ee1a5ee5981 MD5 · raw file

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>The source code</title>
  6. <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
  7. <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
  8. <style type="text/css">
  9. .highlight { display: block; background-color: #ddd; }
  10. </style>
  11. <script type="text/javascript">
  12. function highlight() {
  13. document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
  14. }
  15. </script>
  16. </head>
  17. <body onload="prettyPrint(); highlight();">
  18. <pre class="prettyprint lang-js"><span id='Ext-fx-CubicBezier'>/**
  19. </span> * @class Ext.fx.CubicBezier
  20. * @ignore
  21. */
  22. Ext.define('Ext.fx.CubicBezier', {
  23. /* Begin Definitions */
  24. singleton: true,
  25. /* End Definitions */
  26. cubicBezierAtTime: function(t, p1x, p1y, p2x, p2y, duration) {
  27. var cx = 3 * p1x,
  28. bx = 3 * (p2x - p1x) - cx,
  29. ax = 1 - cx - bx,
  30. cy = 3 * p1y,
  31. by = 3 * (p2y - p1y) - cy,
  32. ay = 1 - cy - by;
  33. function sampleCurveX(t) {
  34. return ((ax * t + bx) * t + cx) * t;
  35. }
  36. function solve(x, epsilon) {
  37. var t = solveCurveX(x, epsilon);
  38. return ((ay * t + by) * t + cy) * t;
  39. }
  40. function solveCurveX(x, epsilon) {
  41. var t0, t1, t2, x2, d2, i;
  42. for (t2 = x, i = 0; i &lt; 8; i++) {
  43. x2 = sampleCurveX(t2) - x;
  44. if (Math.abs(x2) &lt; epsilon) {
  45. return t2;
  46. }
  47. d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
  48. if (Math.abs(d2) &lt; 1e-6) {
  49. break;
  50. }
  51. t2 = t2 - x2 / d2;
  52. }
  53. t0 = 0;
  54. t1 = 1;
  55. t2 = x;
  56. if (t2 &lt; t0) {
  57. return t0;
  58. }
  59. if (t2 &gt; t1) {
  60. return t1;
  61. }
  62. while (t0 &lt; t1) {
  63. x2 = sampleCurveX(t2);
  64. if (Math.abs(x2 - x) &lt; epsilon) {
  65. return t2;
  66. }
  67. if (x &gt; x2) {
  68. t0 = t2;
  69. } else {
  70. t1 = t2;
  71. }
  72. t2 = (t1 - t0) / 2 + t0;
  73. }
  74. return t2;
  75. }
  76. return solve(t, 1 / (200 * duration));
  77. },
  78. cubicBezier: function(x1, y1, x2, y2) {
  79. var fn = function(pos) {
  80. return Ext.fx.CubicBezier.cubicBezierAtTime(pos, x1, y1, x2, y2, 1);
  81. };
  82. fn.toCSS3 = function() {
  83. return 'cubic-bezier(' + [x1, y1, x2, y2].join(',') + ')';
  84. };
  85. fn.reverse = function() {
  86. return Ext.fx.CubicBezier.cubicBezier(1 - x2, 1 - y2, 1 - x1, 1 - y1);
  87. };
  88. return fn;
  89. }
  90. });</pre>
  91. </body>
  92. </html>