JavaScript graphic animation design--moving with a simple sine wave trajectory
Last Update:2015-06-29
Source: Internet
Author: User
<span id="Label3"></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;"><!</span></span><span style="color: #ff00ff;"><span style="color: #ff00ff;">DOCTYPE HTML</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span><span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">HTML</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Head</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Meta</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">CharSet</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "utf-8"</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">title</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span>Wave 1<span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">title</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Link</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">rel</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "stylesheet"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">href</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">=".. /include/style.css "</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">Head</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Body</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Header</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span><span style="color: #000000;"><span style="color: #000000;">Example</span> from</span><span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">a</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">href</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "http://amzn.com/1430236655?tag=html5anim-20"</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">><</span></span><span style="color: #800000;"><span style="color: #800000;">em</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span>Foundation HTML5 Animation with JavaScript<span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">em</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></</span></span><span style="color: #800000;"><span style="color: #800000;">a</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">Header</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Canvas</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">ID</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "canvas"</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">width</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "the</span> "</span><span style="color: #ff0000;"><span style="color: #ff0000;">Height</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "the</span> "</span><span style="color: #0000ff;"><span style="color: #0000ff;">></</span></span><span style="color: #800000;"><span style="color: #800000;">Canvas</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Script</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">src</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">=".. /include/utils.js "</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></</span></span><span style="color: #800000;"><span style="color: #800000;">Script</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Script</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">src</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">= "./classes/ball.js"</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></</span></span><span style="color: #800000;"><span style="color: #800000;">Script</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">Script</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">window.onload</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #0000ff;"><span style="background-color: #f5f5f5; color: #0000ff;">function</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;"> () { </span></span><span style="background-color: #f5f5f5; color: #0000ff;"><span style="background-color: #f5f5f5; color: #0000ff;">var</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">Canvas</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">document.getElementById (</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">'</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">Canvas</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">'</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">), Context</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">Canvas.getcontext (</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">'</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">2d</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">'</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">),</span> ball</span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #0000ff;"><span style="background-color: #f5f5f5; color: #0000ff;">New</span></span><span style="background-color: #f5f5f5; color: #000000;">ball <span style="background-color: #f5f5f5; color: #000000;">(), Angle</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">0</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">, CenterY</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;"></span> $</span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">, Range</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;"></span> -</span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">, XSpeed</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">1</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">, Yspeed</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">0.05</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">; Ball.x</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">0</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">; (</span></span><span style="background-color: #f5f5f5; color: #0000ff;"><span style="background-color: #f5f5f5; color: #0000ff;">function</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">drawframe () {window.requestanimationframe (drawframe, canvas); Context.clearrect (</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">0</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">, </span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">0</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">, canvas.width, canvas.height); Ball.x</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">+=</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">xspeed; Ball.y</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">=</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">CenterY</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">/</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">2</span></span> <span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">+</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">Math.sin (angle)</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">*</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">range; Angle</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">+=</span></span><span style="background-color: #f5f5f5; color: #000000;"><span style="background-color: #f5f5f5; color: #000000;">yspeed; Ball.draw (context); }()); }; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">Script</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">Body</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></</span></span><span style="color: #800000;"><span style="color: #800000;">HTML</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span></pre><span class="cnblogs_code_collapse"><span class="cnblogs_code_collapse">View Code</span></span><p><p>where Util.js</p></p><pre><span style="color: #000000;">/** * Normalize The browser animation API across Implementations. This requests * The browser to schedule a repaint of the windows for the next animation Frame. * Checks for Cross-browser support, and, failing to find it, falls back to SetTimeout. * @param {function} callback function to call time It's time to update your animation for the next Repaint. * @param {htmlelement} element Optional parameter specifying the element that visually bounds the entire Animation. * @return {number} Animation frame Request. */if (!window.requestanimationframe) {window.requestanimationframe = (window.webkitrequestanimationframe | | Window.mozrequestanimationframe | | Window.msrequestanimationframe | | Window.orequestanimationframe | | function (callback) {return window.settimeout (callback, 17/*~ 1000/60*/); });} /** * Cancels an animation frame Request. * Checks for Cross-browser support, falls back to Cleartimeout. * @param {number} Animation frame Request. */if (!window.cancelrequestanimationframe) {window.cancelrequestanimationframe = (window.cancelanimationframe | | Window.webkitcancelrequestanimationframe | | Window.mozcancelrequestanimationframe | | Window.mscancelrequestanimationframe | | Window.ocancelrequestanimationframe | | window.cleartimeout);} /* Object that contains our utility Functions. * Attached to the Window object which acts as the global namespace. */window.utils = {};/** * Keeps track of the current mouse position, relative to an element. * @param {htmlelement} elemen T * @return {object} Contains properties:x, y, Event */window.utils.capturemouse = function (element) { var mouse = {x:0, y:0, event:null}, body_scrollleft = document.body.scrollLeft, Element_scrollleft = Docume nt.documentElement.scrollLeft, Body_scrolltop = document.body.scrollTop, Element_scrolltop = Document.documentel ement.scrolltop, offsetleft = element.offsetleft, OffsetTop = element.offsettop; Element.addeventlistener (' mousemove ', function (event) {var x, y; If (event.pagex | | Event.pagey) {x = event.pagex; y = event.pagey; } else {x = Event.clientx + body_scrollleft + element_scrollleft; y = event.clienty + body_scrolltop + element_scrolltop; } x-= offsetleft; y-= offsetTop; mouse.x = x; Mouse.y = y; Mouse.event = event; }, false); Return mouse;};/ * * keeps track of the current (first) touch position, relative to an Element. * @param {htmlelement} element * @return {object} Contains properties:x, y, ispressed, Event */window.utils.capturetouch = function (element) {var Touch= {x:null, y:null, ispressed:false, event:null}, body_scrollleft = document.body.scrollLeft, element_scrolll EFT = document.documentElement.scrollLeft, Body_scrolltop = document.body.scrollTop, Element_scrolltop = documen t.documentelement.scrolltop, offsetleft = element.offsetleft, OffsetTop = element.offsettop; Element.addeventlistener (' touchstart ', function (event) {touch.ispressed = true; Touch.event = event; }, false); Element.addeventlistener (' touchend ', function (event) {touch.ispressed = false; touch.x = null; TOUCH.Y = null; Touch.event = event; }, false); Element.addeventlistener (' touchmove ', function (event) {var x, y, touch_event = Event.touches[0];//first Touch If (touch_event.pagex | | Touch_event.pagey) {x = touch_event.pagex; y = touch_event.pagey; } else {x = Touch_event.clientx + body_scrollleft + element_scrollleft; y = touch_event.clienty + body_scrolltop + element_scrolltop; } x-= offsetleft; y-= offsetTop; touch.x = x; TOUCH.Y = y; Touch.event = event; }, false); Return touch;};/ * * Returns a color in the Format: ' #RRGGBB ', or as a hex number if Specified. * @param {number|string} Color * @param {boolean=} tonumber=false Return color as a hex number. * @return {string|number} */window.utils.parsecolor = function (color, tonumber) {if (tonumber = = = True) {if (typeof color = = = ' number ') {return (color | 0);//chop off decimal} if (typeof color = = = ' String ' && color[ 0] = = = ' # ') {color = Color.slice (1); } return Window.parseint (color, 16); } else {if (typeof color = = = ' number ') {color = ' # ' + (' 00000 ' + (color | 0). toString). substr ( -6);//pad } return color; }};/** * Converts a color to the RGB string format: ' RGB (r,g,b) ' or ' rgba (r,g,b,a) ' * @param {number|string} color * @para M {number} Alpha * @return {string} */window.utils.colortorgb = functiOn (color, alpha) {//number in octal format or string prefixed with # if (typeof color = = = ' String ' && color[0] = = = ' # ') {color = window.parseint (color.slice (1), 16); } Alpha = (alpha = = = undefined)? 1:alpha; Parse hex values var r = Color >> & 0xff, g = Color >> 8 & 0xff, b = color & 0xff, A = (alpha</span><span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">0</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">) ? 0: ((alpha</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span><span style="color: #000000;"><span style="color: #000000;">1)? 1:alpha); Only use ' RGBA ' if needed if (a = = 1) {return "rgb (" + R + "," + G + "," + B + ")"; } else {return ' Rgba ("+ r +", "+ g +", "+ b +", "+ a +") "; }};/** * Determine if a rectangle contains the coordinates (x, y) within it ' s Boundaries. * @param {object} Rect object with properties:x, y, width, height. * @param {number} x coordinate position X. * @param {number} y coordinate position y. * @return {boolean} */wind Ow.utils.containsPoint = function (rect, x, y) {return! X</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">rect</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">. x | | X</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span><span style="color: #000000;"><span style="color: #000000;">rect.x + rect.width | | Y</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">rect</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">. y | | Y</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">></span></span><span style="color: #000000;"><span style="color: #000000;">Rect.y + rect.height);};/ * * Determine if rectangles overlap. * @param {object} Recta object with properties:x, y, width, height. * @param {object} RECTB object with properties:x, y, width, height. * @return {boolean} */window.utils.intersects = function (recta, rectb) {return! ( recta.x + recta.width</span></span><span style="color: #0000ff;"><span style="color: #0000ff;"><</span></span><span style="color: #800000;"><span style="color: #800000;">RECTB</span></span><span style="color: #ff0000;"><span style="color: #ff0000;">. x | | rectb.x + rectb.width < recta.x | | RECTA.Y + recta.height < RECTB.Y | | Rectb.y + rectb.height < recta.y);};</span></span></pre><span class="cnblogs_code_collapse"><span class="cnblogs_code_collapse">View Code</span></span><p><p>where Ball.js</p></p><pre><pre><span style="color: #000000;">function Ball (radius, Color) { if (radius = = = Undefined) {radius = +;} if (color = = = Undefined) {color = "#ff0000";} This.x = 0; This.y = 0; This.radius = radius; This.rotation = 0; This.scalex = 1; This.scaley = 1; This.color = Utils.parsecolor (color); This.linewidth = 1;} Ball.prototype.draw = function (context) { context.save (); Context.translate (this.x, this.y); Context.rotate (this.rotation); Context.scale (this.scalex, this.scaley); Context.linewidth = this.linewidth; Context.fillstyle = this.color; Context.beginpath (); x, y, radius, start_angle, end_angle, anti-clockwise context.arc (0, 0, this.radius, 0, (math.pi * 2), true); Context.closepath (); Context.fill (); If (this.linewidth > 0) { context.stroke (); } Context.restore ();};</span></pre></pre><span class="cnblogs_code_collapse"><span class="cnblogs_code_collapse">View Code</span></span><p><p></p></p><p><p>JavaScript graphic animation design--moving with a simple sine wave trajectory</p></p></span>