画线 动画效果

若转帖请注明原出处,谢谢!

动画手册: http://ecd.tencent.com/css3/guide.html

室内导航路径动态画线 :

插件: https://github.com/camoconnell/lazy-line-painter

室内导航目前还不算成熟,但公司接到项目恰好有个很小的室内导航,为了使这个室内导航更具动态效果更显眼,要求路线是向用铅笔画线一样慢慢画出,研究了下上面的插件之后自己摘除了里面的一段code并加以改动了下实现了画线。

我是用的raphael.js 插件来做一些事情的,并且lazy-line-painter本身也是要依赖于raphael的

lazy-line-painter的部分原理(不一定很准确):比如在一张室内图片上有2点A 和 B,lazy-line-painter首先会画出A和B点之间的线Line_AB_1但是把这条线设为透明的,在视觉上根本看不到这条线,之后呢根据你所设的时间(即你设想总共画出这条线的时间)把这条线分为若干份,之后不断的画出一小份一小份的线,最后组成一条新的路径线路并把之前的那个线Line_AB_1删掉,接下来看代码

var draw = Raphael('map_navigation_container', 964, 893);
var lineStr = "M498,467L512,452,L512,444L548,445L547,496L525,497L498,467";
var polyline = draw.path(lineStr).attr({ "stroke": "none","stroke-width": 0,"fill-opacity": 0});
 print({
        'canvas': draw, 
        'pathstr': polyline, 
        'duration': 5000,
        'attr': {
                 "fill-opacity": 0,
                 "stroke": "#000",
                 "stroke-dasharray": null,
                 "stroke-linecap": "round",
                 "stroke-linejoin": "round",
                 "stroke-opacity": 1,
                 "stroke-width": 3
                 },
         'callback': function () { }
 	}, this);
var print = function( settings, octx ) {

        var canvas = settings.canvas, 
            duration = settings.duration, 
            attr = settings.attr;


        var guide_path = settings.pathstr;


        var path = canvas.path( guide_path.getSubpath( 0, 1 ) ).attr( attr ),
            total_length = guide_path.getTotalLength( guide_path ),
            start_time = new Date().getTime(),
            interval_length = 25;


        var interval_id = setInterval( function()
        {
            var elapsed_time = new Date().getTime() - start_time,
                this_length = elapsed_time / duration * total_length,
                subpathstr = guide_path.getSubpath( 0, this_length );


            attr.path = subpathstr;


            path.animate( attr, interval_length );
            if ( elapsed_time >= duration )
            {
                clearInterval( interval_id );
                if (settings.callback !== undefined) {
                    settings.callback();
                }
                guide_path.remove();
            }
        }, interval_length );

转载自:https://blog.csdn.net/qinglianluan/article/details/13022293

You may also like...