欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Canvas 3D球形文字云动画特效

程序员文章站 2022-10-04 21:50:08
Canvas 3D球形文字云动画特效 效果图: 代码如下,复制即可使用: (适用浏览器:360、FireFox、Chrome、Opera、傲游、搜狗、世界之窗. 不支持Safari、IE8及以下浏览器。) canvas.min.js 如有错误,欢迎联系我改正,非常感谢!!! ......

 canvas 3d球形文字云动画特效

 效果图:

 Canvas 3D球形文字云动画特效

 代码如下,复制即可使用:

  (适用浏览器:360、firefox、chrome、opera、傲游、搜狗、世界之窗. 不支持safari、ie8及以下浏览器。)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>canvas 3d球形文字云动画特效</title>

<style>
body {
    background-color:#000000;
    color:#555555;
}
h4 {
    font-family:sans-serif;
    color:#555555;
    font-size:16px;
}
h3 {
    font-family:sans-serif;
    color:#555555;
}
p {
    font-family:sans-serif;
    color:#888888;
    font-size:14px;
}
a {
    font-family:sans-serif;
    color:#d15423;
    text-decoration:none;
}
</style>

</head>
<body>
<!-- 此处需要自己修改路径 -->
<script src="js/canvas.min.js"></script>

<div style="text-align:center">

    <canvas id="canvasone" width="900" height="520" ></canvas>

</div>

<script type="text/javascript">
window.addeventlistener("load", windowloadhandler, false);
var sphererad = 280;
var radius_sp=1;
var opt_display_dots = false;

var unicodeflakes = ['?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '我', '蒌', '火', '的', '山', '首', '页', '嫖', '是', '肺', '化', '?', '化', '?', '符', '?', '是', '原', '子', '序', '?', '是', '它', '是', '肺', '灰', '白', '色', '?', '金', '?', '有', '光', '?', '冱', '硬', '?', '於', '碳', '族', '化', '?', '性', '冱', '陪', '同', '族', '的', '遽', '陪', '矽', '相', '共', '有', '五', '肺', '同', '位', '素', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '才', '菜', '参', '餐', '层', '茶', '差', '长', '常', '场', '唱', '超', '车', '成', '城', '程', '吃', '店', '定', '订', '丢', '东', '冬', '懂', '动', '都', '读', '独', '度', '短', '对', '多', '饿', '儿', '而', '发', '法', '反', '饭', '方', '房', '放', '飞', '非', '费', '分', '份', '风', '封', '夫', '服', '附', '父', '复', '该', '改', '干', '感', '刚', '高', '告', '哥', '歌', '格', '个', '给', '号', '喝', '和', '河', '贺', '黑', '很', '红', '后', '候', '湖', '护', '花', '化', '画', '话', '坏', '欢', '还', '换', '黄', '回', '会', '婚', '活', '火', '或', '机', '鸡', '级', '极', '急', '际', '济', '继', '寄', '加', '家', '假', '价', '力', '历', '丽', '联', '凉', '两', '亮', '谅', '辆', '了', '林', '零', '六', '楼', '路', '录', '旅', '妈', '马', '码', '吗', '买', '卖', '满', '慢', '忙', '猫', '毛', '贸', '么', '没', '每', '美', '妹', '米', '面', '民', '明', '末', '母', '目', '拿', '哪', '那', '奶', '男', '南', '难', '脑', '呢', '能', '你', '年', '念', '鸟', '您', '牛', '农', '努', '女', '暖', '欧', '怕', '乓', '旁', '胖', '跑', '朋', '片', '漂', '票', '乒', '平', '期', '其', '奇', '骑', '起', '气', '汽', '千', '前', '签', '轻', '清', '情', '请', '秋', '球', '区', '取', '去', '趣', '全', '然', '让', '首', '售', '书', '术', '树', '双', '谁', '水', '睡', '说', '司', '思', '死', '四', '送', '诉', '算', '虽', '岁', '孙', '所', '他', '她', '它', '台', '太', '谈', '汤', '堂', '套', '特', '踢', '提', '题', '体', '天', '填', '条', '铁', '听', '厅', '庭', '通', '同', '头', '图', '外', '玩', '完', '晚', '万', '王', '网', '往', '忘', '望', '卫', '为', '位', '文', '我', '卧', '五', '午', '务', '物', '西', '吸', '希', '息', '习', '牙', '亚', '烟', '言', '羊', '阳', '样', '药', '要', '也', '业', '夜', '一', '衣', '医', '已', '以', '易', '意', '因', '音', '印', '银', '应', '英', '影', '硬', '用', '邮', '油', '游', '友', '有', '又', '右', '鱼', '愉', '雨', '语', '元', '员', '园', '原', '远', '院', '愿', '月', '在', '早', '怎', '张', '找', '照', '者', '这', '真', '正', '证', '知', '只', '之', '直', '止', '纸', '至', '治', '中', '钟', '种', '重', '周', '洲', '主', '住', '助', '祝', '注', '专', '准' ];

//for debug messages
var debugger = function() { };
debugger.log = function(message) {
    try {
        console.log(message);
    }
    catch (exception) {
        return;
    }
}

function windowloadhandler() {
    canvasapp();
}

function canvassupport() {
    return modernizr.canvas;
}

function canvasapp() {
    if (!canvassupport()) {
        return;
    }
    
    var thecanvas = document.getelementbyid("canvasone");
    var context = thecanvas.getcontext("2d");
    
    var displaywidth;
    var displayheight;
    var timer;
    var wait;
    var count;
    var numtoaddeachframe;
    var particlelist;
    var recyclebin;
    var particlealpha;
    var r,g,b;
    var flen;
    var m;
    var projcenterx;
    var projcentery;
    var zmax;
    var turnangle;
    var turnspeed;
    var spherecenterx, spherecentery, spherecenterz;
    var particlerad;
    var zeroalphadepth;
    var randaccelx, randaccely, randaccelz;
    var gravity;
    var rgbstring;
    //we are defining a lot of variables used in the screen update functions globally so that they don't have to be redefined every frame.
    var p;
    var outsidetest;
    var nextparticle;
    var sinangle;
    var cosangle;
    var rotx, rotz;
    var depthalphafactor;
    var i;
    var theta, phi;
    var x0, y0, z0;
        
    init();
    
  // initialli
    function init() {
        wait = 1;
        count = wait - 1;
        numtoaddeachframe = 4;
        
        //particle color
        r = 70;
        g = 255;
        b = 140;
        
        rgbstring = "rgba("+r+","+g+","+b+","; //partial string for color which will be completed by appending alpha value.
        particlealpha = 1; //maximum alpha
        
        displaywidth = thecanvas.width;
        displayheight = thecanvas.height;
        
        flen = 320; //represents the distance from the viewer to z=0 depth.
        
        //projection center coordinates sets location of origin
        projcenterx = displaywidth/2;
        projcentery = displayheight/2;
        
        //we will not draw coordinates if they have too large of a z-coordinate (which means they are very close to the observer).
        zmax = flen-2;
        
        particlelist = {};
        recyclebin = {};
        
        //random acceleration factors - causes some random motion
        randaccelx = 0.1;
        randaccely = 0.1;
        randaccelz = 0.1;
        
        gravity = -0; //try changing to a positive number (not too large, for example 0.3), or negative for floating upwards.
        
        particlerad = 2.5;
        
        spherecenterx = 0;
        spherecentery = 0;
        spherecenterz = -3 - sphererad;
        
        //alpha values will lessen as particles move further back, causing depth-based darkening:
        zeroalphadepth = -750; 
        
        turnspeed = 2*math.pi/1200; //the sphere will rotate at this speed (one complete rotation every 1600 frames).
        turnangle = 0; //initial angle
        
        timer = setinterval(ontimer, 10/24);
    }
    
    function ontimer() {
        //if enough time has elapsed, we will add new particles.        
        count++;
            if (count >= wait) {
                        
            count = 0;
            for (i = 0; i < numtoaddeachframe; i++) {
                theta = math.random()*2*math.pi;
                phi = math.acos(math.random()*2-1);
                x0 = sphererad*math.sin(phi)*math.cos(theta);
                y0 = sphererad*math.sin(phi)*math.sin(theta);
                z0 = sphererad*math.cos(phi);
                
                //we use the addparticle function to add a new particle. the parameters set the position and velocity components.
                //note that the velocity parameters will cause the particle to initially fly outwards away from the sphere center (after
                //it becomes unstuck).
                var p = addparticle(x0, spherecentery + y0, spherecenterz + z0, 0.002*x0, 0.002*y0, 0.002*z0);
                
                //we set some "envelope" parameters which will control the evolving alpha of the particles.
                p.attack = 50;
                p.hold = 50;
                p.decay = 100;
                p.initvalue = 0;
                p.holdvalue = particlealpha;
                p.lastvalue = 0;
                
                //the particle will be stuck in one place until this time has elapsed:
                p.stucktime = 90 + math.random()*20;
                
                p.accelx = 0;
                p.accely = gravity;
                p.accelz = 0;
            }
        }
        
        //update viewing angle
        turnangle = (turnangle + turnspeed) % (2*math.pi);
        sinangle = math.sin(turnangle);
        cosangle = math.cos(turnangle);

        //background fill
        context.fillstyle = "#000000";
        context.fillrect(0,0,displaywidth,displayheight);
        
        //update and draw particles
        p = particlelist.first;
        while (p != null) {
            //before list is altered record next particle
            nextparticle = p.next;

            //update age
            p.age++;
            
            //if the particle is past its "stuck" time, it will begin to move.
            if (p.age > p.stucktime) {    
                p.velx += p.accelx + randaccelx*(math.random()*2 - 1);
                p.vely += p.accely + randaccely*(math.random()*2 - 1);
                p.velz += p.accelz + randaccelz*(math.random()*2 - 1);
                
                p.x += p.velx;
                p.y += p.vely;
                p.z += p.velz;
            }
            
            /*
            we are doing two things here to calculate display coordinates.
            the whole display is being rotated around a vertical axis, so we first calculate rotated coordinates for
            x and z (but the y coordinate will not change).
            then, we take the new coordinates (rotx, y, rotz), and project these onto the 2d view plane.
            */
            rotx =  cosangle*p.x + sinangle*(p.z - spherecenterz);
            rotz =  -sinangle*p.x + cosangle*(p.z - spherecenterz) + spherecenterz;
            m =radius_sp* flen/(flen - rotz);
            p.projx = rotx*m + projcenterx;
            p.projy = p.y*m + projcentery;
            
            //update alpha according to envelope parameters.
            if (p.age < p.attack+p.hold+p.decay) {
                if (p.age < p.attack) {
                    p.alpha = (p.holdvalue - p.initvalue)/p.attack*p.age + p.initvalue;
                }
                else if (p.age < p.attack+p.hold) {
                    p.alpha = p.holdvalue;
                }
                else if (p.age < p.attack+p.hold+p.decay) {
                    p.alpha = (p.lastvalue - p.holdvalue)/p.decay*(p.age-p.attack-p.hold) + p.holdvalue;
                }
            }
            else {
                p.dead = true;
            }
            
            //see if the particle is still within the viewable range.
            if ((p.projx > displaywidth)||(p.projx<0)||(p.projy<0)||(p.projy>displayheight)||(rotz>zmax)) {
                outsidetest = true;
            }
            else {
                outsidetest = false;
            }
            
            if (outsidetest||p.dead) {
                recycle(p);
            }
            
            else {
                //depth-dependent darkening
                depthalphafactor = (1-rotz/zeroalphadepth);
                depthalphafactor = (depthalphafactor > 1) ? 1 : ((depthalphafactor<0) ? 0 : depthalphafactor);
                context.fillstyle = rgbstring + depthalphafactor*p.alpha + ")";
            /*add text function!*/
           
                context.filltext(p.flake,p.projx, p.projy);
            /*add text function!*/
    
                //draw
                context.beginpath();
        if(opt_display_dots)
          {context.arc(p.projx, p.projy, m*particlerad, 0, 2*math.pi, false);}
                context.closepath();
                context.fill();
            }
            
            p = nextparticle;
        }
    }
        
    function addparticle(x0,y0,z0,vx0,vy0,vz0) {
        var newparticle;
        var color;
    
        
        //check recycle bin for available drop:
        if (recyclebin.first != null) {
            newparticle = recyclebin.first;
            //remove from bin
            if (newparticle.next != null) {
                recyclebin.first = newparticle.next;
                newparticle.next.prev = null;
            }
            else {
                recyclebin.first = null;
            }
        }
        //if the recycle bin is empty, create a new particle (a new ampty object):
        else {
            newparticle = {};
        }
        
        //add to beginning of particle list
        if (particlelist.first == null) {
            particlelist.first = newparticle;
            newparticle.prev = null;
            newparticle.next = null;
        }
        else {
            newparticle.next = particlelist.first;
            particlelist.first.prev = newparticle;
            particlelist.first = newparticle;
            newparticle.prev = null;
        }
        
        //initialize
        newparticle.x = x0;
        newparticle.y = y0;
        newparticle.z = z0;
        newparticle.velx = vx0;
        newparticle.vely = vy0;
        newparticle.velz = vz0;
        newparticle.age = 0;
        newparticle.dead = false;
    
    newparticle.flake = unicodeflakes[math.floor(math.random() * unicodeflakes.length)];
        if (math.random() < 0.5) {
            newparticle.right = true;
        }
        else {
            newparticle.right = false;
        }
        return newparticle;        
    }
    
    function recycle(p) {
        //remove from particlelist
        if (particlelist.first == p) {
            if (p.next != null) {
                p.next.prev = null;
                particlelist.first = p.next;
            }
            else {
                particlelist.first = null;
            }
        }
        else {
            if (p.next == null) {
                p.prev.next = null;
            }
            else {
                p.prev.next = p.next;
                p.next.prev = p.prev;
            }
        }
        //add to recycle bin
        if (recyclebin.first == null) {
            recyclebin.first = p;
            p.prev = null;
            p.next = null;
        }
        else {
            p.next = recyclebin.first;
            recyclebin.first.prev = p;
            recyclebin.first = p;
            p.prev = null;
        }
    }    
}
</script>

<div style="text-align:center;margin:50px 0; font:normal 14px/24px 'microsoft yahei';">
<p>适用浏览器:360、firefox、chrome、opera、傲游、搜狗、世界之窗. 不支持safari、ie8及以下浏览器。</p>
</div>
</body>
</html>

  canvas.min.js

/* modernizr 2.6.2 (custom build) | mit & bsd
 * build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
 */
;window.modernizr=function(a,b,c){function d(a){j.csstext=a}function e(a,b){return d(n.join(a+";")+(b||""))}function f(a,b){return typeof a===b}function g(a,b){return!!~(""+a).indexof(b)}function h(a,b){for(var d in a){var e=a[d];if(!g(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function i(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:f(f,"function")?f.bind(d||b):f}return!1}function j(a,b,c){var d=a.charat(0).touppercase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return f(b,"string")||f(b,"undefined")?h(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),i(e,b,c))}function k(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createelement("datalist")&&!!a.htmldatalistelement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setattribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.csstext="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.webkitappearance!==c?(g.appendchild(k),h=b.defaultview,e=h.getcomputedstyle&&h.getcomputedstyle(k,null).webkitappearance!=="textfield"&&k.offsetheight!==0,g.removechild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkvalidity&&k.checkvalidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentelement,h="modernizr",i=b.createelement(h),j=i.style,k=b.createelement("input"),l=":)",m={}.tostring,n=" -webkit- -moz- -o- -ms- ".split(" "),o="webkit moz o ms",p=o.split(" "),q=o.tolowercase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createelement("div"),m=b.body,n=m||b.createelement("body");if(parseint(d,10))while(d--)j=b.createelement("div"),j.id=e?e[d]:h+(d+1),l.appendchild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerhtml+=f,n.appendchild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendchild(n)),i=c(l,a),m?l.parentnode.removechild(l):(n.parentnode.removechild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchmedia||a.msmatchmedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getcomputedstyle?getcomputedstyle(b,null):b.currentstyle)["position"]=="absolute"}),d},a=function(){function d(d,e){e=e||b.createelement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setattribute||(e=b.createelement("div")),e.setattribute&&e.removeattribute&&(e.setattribute(d,""),f=f(e[d],"function"),f(e[d],"undefined")||(e[d]=c),e.removeattribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),b={}.hasownproperty,c;!f(b,"undefined")&&!f(b.call,"undefined")?c=function(a,b){return b.call(a,b)}:c=function(a,b){return b in a&&f(a.constructor.prototype[b],"undefined")},function.prototype.bind||(function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new typeerror;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return j("flexwrap")},s.canvas=function(){var a=b.createelement("canvas");return!!a.getcontext&&!!a.getcontext("2d")},s.canvastext=function(){return!!e.canvas&&!!f(b.createelement("canvas").getcontext("2d").filltext,"function")},s.webgl=function(){return!!a.webglrenderingcontext},s.touch=function(){var c;return"ontouchstart"in a||a.documenttouch&&b instanceof documenttouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsettop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postmessage},s.websqldatabase=function(){return!!a.opendatabase},s.indexeddb=function(){return!!j("indexeddb",a)},s.hashchange=function(){return a("hashchange",a)&&(b.documentmode===c||b.documentmode>7)},s.history=function(){return!!a.history&&!!history.pushstate},s.draganddrop=function(){var a=b.createelement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"websocket"in a||"mozwebsocket"in a},s.rgba=function(){return d("background-color:rgba(150,255,150,.5)"),g(j.backgroundcolor,"rgba")},s.hsla=function(){return d("background-color:hsla(120,40%,100%,.5)"),g(j.backgroundcolor,"rgba")||g(j.backgroundcolor,"hsla")},s.multiplebgs=function(){return d("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return j("backgroundsize")},s.borderimage=function(){return j("borderimage")},s.borderradius=function(){return j("borderradius")},s.boxshadow=function(){return j("boxshadow")},s.textshadow=function(){return b.createelement("div").style.textshadow===""},s.opacity=function(){return e("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return j("animationname")},s.csscolumns=function(){return j("columncount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return d((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),g(j.backgroundimage,"gradient")},s.cssreflections=function(){return j("boxreflect")},s.csstransforms=function(){return!!j("transform")},s.csstransforms3d=function(){var a=!!j("perspective");return a&&"webkitperspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetleft===9&&b.offsetheight===3}),a},s.csstransitions=function(){return j("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getelementbyid("smodernizr"),f=e.sheet||e.stylesheet,g=f?f.cssrules&&f.cssrules[0]?f.cssrules[0].csstext:f.csstext||"":"";a=/src/i.test(g)&&g.indexof(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetheight>=3}),a},s.video=function(){var a=b.createelement("video"),c=!1;try{if(c=!!a.canplaytype)c=new boolean(c),c.ogg=a.canplaytype('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canplaytype('video/mp4; codecs="avc1.42e01e"').replace(/^no$/,""),c.webm=a.canplaytype('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createelement("audio"),c=!1;try{if(c=!!a.canplaytype)c=new boolean(c),c.ogg=a.canplaytype('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canplaytype("audio/mpeg;").replace(/^no$/,""),c.wav=a.canplaytype('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canplaytype("audio/x-m4a;")||a.canplaytype("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localstorage.setitem(h,h),localstorage.removeitem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionstorage.setitem(h,h),sessionstorage.removeitem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.worker},s.applicationcache=function(){return!!a.applicationcache},s.svg=function(){return!!b.createelementns&&!!b.createelementns(r.svg,"svg").createsvgrect},s.inlinesvg=function(){var a=b.createelement("div");return a.innerhtml="<svg/>",(a.firstchild&&a.firstchild.namespaceuri)==r.svg},s.smil=function(){return!!b.createelementns&&/svganimate/.test(m.call(b.createelementns(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createelementns&&/svgclippath/.test(m.call(b.createelementns(r.svg,"clippath")))};for(var l in s)c(s,l)&&(x=l.tolowercase(),e[x]=s[l](),v.push((e[x]?"":"no-")+x));return e.input||k(),e.addtest=function(a,b){if(typeof a=="object")for(var d in a)c(a,d)&&e.addtest(d,a[d]);else{a=a.tolowercase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.classname+=" "+(b?"":"no-")+a),e[a]=b}return e},d(""),i=k=null,function(a,b){function k(a,b){var c=a.createelement("p"),d=a.getelementsbytagname("head")[0]||a.documentelement;return c.innerhtml="x<style>"+b+"</style>",d.insertbefore(c.lastchild,d.firstchild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createelement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].clonenode():e.test(a)?g=(f.cache[a]=f.createelem(a)).clonenode():g=f.createelem(a),g.canhavechildren&&!d.test(a)?f.frag.appendchild(g):g}function o(a,c){a||(a=b);if(j)return a.createdocumentfragment();c=c||m(a);var d=c.frag.clonenode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createelement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createelem=a.createelement,b.createfrag=a.createdocumentfragment,b.frag=b.createfrag()),a.createelement=function(c){return r.shivmethods?n(c,a,b):b.createelem(c)},a.createdocumentfragment=function("h,f","return function(){var n=f.clonenode(),c=n.createelement;h.shivmethods&&("+l().join().replace(/\w+/g,function(a){return b.createelem(a),b.frag.createelement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivcss&&!f&&!c.hascss&&(c.hascss=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#ff0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createelement("a");a.innerhtml="<xyz></xyz>",f="hidden"in a,j=a.childnodes.length==1||function(){b.createelement("a");var a=b.createdocumentfragment();return typeof a.clonenode=="undefined"||typeof a.createdocumentfragment=="undefined"||typeof a.createelement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivcss:c.shivcss!==!1,supportsunknownelements:j,shivmethods:c.shivmethods!==!1,type:"default",shivdocument:q,createelement:n,createdocumentfragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domprefixes=q,e._cssomprefixes=p,e.mq=z,e.hasevent=a,e.testprop=function(a){return h([a])},e.testallprops=j,e.teststyles=y,e.prefixed=function(a,b,c){return b?j(a,b,c):j(a,"pfx")},g.classname=g.classname.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?b.injectcss:b.injectjs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readystate)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removechild(l)},50);for(var d in y[c])y[c].hasownproperty(d)&&y[c][d].onload()}}var j=j||b.errortimeout,l=b.createelement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertbefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=b;return a.loader={load:j,i:0},a}var l=b.documentelement,m=a.settimeout,n=b.getelementsbytagname("script")[0],o={}.tostring,p=[],q=0,r="mozappearance"in l.style,s=r&&!!b.createrange().comparenode,t=s?l:n.parentnode,l=a.opera&&"[object opera]"==o.call(a.opera),l=!!b.attachevent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=array.isarray||function(a){return"[object array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},a,b;b=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origurl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autocallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forcecss||!i.forcejs&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origurl,h,g),j&&j(i.origurl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasownproperty(c)&&b++;return b}(),a)a.hasownproperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?b(j):object(j)===j&&h(j,l);else object(a)===a&&h(a,l)},b.addprefix=function(a,b){z[a]=b},b.addfilter=function(a){x.push(a)},b.errortimeout=1e4,null==b.readystate&&b.addeventlistener&&(b.readystate="loading",b.addeventlistener("domcontentloaded",a=function(){b.removeeventlistener("domcontentloaded",a,0),b.readystate="complete"},0)),a.yepnope=k(),a.yepnope.executestack=h,a.yepnope.injectjs=function(a,c,d,e,i,j){var k=b.createelement("script"),l,o,e=e||b.errortimeout;k.src=a;for(o in d)k.setattribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readystate)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentnode.insertbefore(k,n)},a.yepnope.injectcss=function(a,c,d,e,g,i){var e=b.createelement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setattribute(j,d[j]);g||(n.parentnode.insertbefore(e,n),m(c,0))}}(this,document),modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};

 如有错误,欢迎联系我改正,非常感谢!!!