| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | <!DOCTYPE html><html><head>    <title>Easings</title>    <script src="../dev-lib/sea.js"></script>    <script>        seajs.config({            base: '../src'        });        define('start', function (require) {            var Paper = require('graphic/paper');            var Group = require('graphic/group');            var Path = require('graphic/path');            var Color = require('graphic/color');            var Text = require('graphic/text');            var Matrix = require('graphic/matrix');            var Animator = require('animate/animator');            var easingTable = require('animate/easing');            var YMarker = require('core/class').createClass({                base: Path,                constructor: function( x, w, h ) {                    this.callBase();                    this.draw( x, w, h );                },                draw: function( x, w, h ) {                    var drawer = this.getDrawer();                    var hh = h / 2;                    drawer.moveTo( x, 0 );                    drawer.lineTo( x + hh, hh );                    drawer.lineTo( x + w, hh );                    drawer.lineTo( x + w, -hh );                    drawer.lineTo( x + hh, -hh );                    drawer.close();                },                mark: function( y ) {                    this.setTransform(new Matrix().translate(0, y));                }            });            var MarkerAnimator = require('core/class').createClass({                base: Animator,                constructor: function( beginValue, finishValue ) {                    this.callBase( beginValue, finishValue, function( marker, value ) {                        marker.mark( value );                    } );                }            });            var EasingGraph = require('core/class').createClass({                base: Paper,                constructor: function( container, easing ) {                    this.callBase(container);                    this.setViewBox(0, 0, 200, 120);                    var x = [0, 150], y = [30, 90];                    this.draw( easing, x, y );                    this.bind( easing, x, y );                },                draw: function( easing, x, y ) {                    this.coordinate = new Group().setAnchor(0, 60).scale(1, -1); // flip over y-alix                    this.coordinate.addShape(new Path().pipe(function() {                        var d = this.getDrawer();                        d.moveTo(x[0], y[0]).lineTo(x[1], y[0]);                        d.moveTo(x[0], y[1]).lineTo(x[1], y[1]);                        this.fill('none')                        this.stroke('#CCC')                    }));                    this.coordinate.addShape(new Path().pipe(function() {                        var d = this.getDrawer();                        d.moveTo(x[0], y[0]);                        for(var t = x[0]; t <= x[1]; t += 1) {                            d.lineTo(t, easing(t, y[0], y[1] - y[0], x[1] - x[0]));                        }                        this.fill('none');                        this.stroke('red');                    }));                    this.addShape(this.coordinate);                },                bind: function( easing, x, y ) {                    var marker = new YMarker( x[1] + 5, 25, 10 );                    marker.mark( y[0] );                    this.coordinate.addShape( marker );                    marker.fill('none');                    var animator = new MarkerAnimator( y[0], y[1] );                    var timeline = animator.create( marker, 1000, easing );                    var animateTimeout;                    this.on('mouseover', function() {                        marker.fill('red');                        timeline.play();                    });                    this.on('mouseout', function() {                        marker.fill('none');                        timeline.stop();                        timeline.reset();                    });                }            });                        for(var name in easingTable) {                var div = document.createElement('div');                var graph = new EasingGraph( div, easingTable[name] );                graph.setWidth(200);                graph.setHeight(120);                document.body.appendChild(div);                div.appendChild(document.createTextNode(name));            }                    });        seajs.use('start');    </script>    <style>        div {            width: 200px;            height: 150px;            float: left;            color: blue;        }    </style></head><body>    </body></html>
 |