JavaScript graphic animation design--moving with a simple sine wave trajectory

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>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.