2015-07-02 13:57:26 +08:00
|
|
|
|
/**
|
|
|
|
|
* Created by jljsj on 15/6/24.
|
|
|
|
|
*/
|
|
|
|
|
$(function (){
|
|
|
|
|
var $S=function(typename){
|
|
|
|
|
if(typename.indexOf("<")>=0){
|
|
|
|
|
var node=$(typename);
|
|
|
|
|
var node_m=$(document.createElementNS("http://www.w3.org/2000/svg",node[0].tagName.toLowerCase()));
|
|
|
|
|
//var node_b=typename.replace(/<[^\s]*|[>,/>]*/gi,"");
|
|
|
|
|
for(var i=0;i<node[0].attributes.length;i++){
|
|
|
|
|
node_m.attr(node[0].attributes[i].name,node[0].attributes[i].value);
|
|
|
|
|
}
|
|
|
|
|
node_m.html(node.html());
|
|
|
|
|
return node_m
|
|
|
|
|
}
|
|
|
|
|
return $(document.createElementNS("http://www.w3.org/2000/svg",typename))
|
|
|
|
|
};
|
|
|
|
|
var SVG=(function () {
|
|
|
|
|
var s_node=function (s){
|
|
|
|
|
if(s){
|
|
|
|
|
this.node=$S(s);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
var n=s_node.prototype={
|
|
|
|
|
_x:0,
|
|
|
|
|
_y:0,
|
|
|
|
|
_scaleX:1,
|
|
|
|
|
_scaleY:1,
|
|
|
|
|
_rotation:0,
|
|
|
|
|
_skewX:0,
|
|
|
|
|
_skewY:0,
|
|
|
|
|
set id(id){this.attr("id",id)},
|
|
|
|
|
get id(){return this.attr("id")},
|
|
|
|
|
set x(x){this.setTransform(x,this._y,this._scaleX,this._scaleY,this._rotation,this._skewX,this._skewY);},
|
|
|
|
|
get x(){return this._x},
|
|
|
|
|
set y(y){this.setTransform(this._x,y,this._scaleX,this._scaleY,this._rotation,this._skewX,this._skewY);},
|
|
|
|
|
get y(){return this._y},
|
|
|
|
|
set scale(x){this.setTransform(this._x,this._y,x,x,this._rotation,this._skewX,this._skewY);},
|
|
|
|
|
get scale(){return this._scaleX==this._scaleY?this._scaleX:{scaleX:this._scaleX,scaleY:this._scaleY}},
|
|
|
|
|
set scaleX(x){this.setTransform(this._x,this._y,x,this._scaleY,this._rotation,this._skewX,this._skewY);},
|
|
|
|
|
get scaleX(){return this._scaleX},
|
|
|
|
|
set scaleY(y){this.setTransform(this._x,this._y,this._scaleX,y,this._rotation,this._skewX,this._skewY);},
|
|
|
|
|
get scaleY(){return this._scaleY},
|
|
|
|
|
set rotation(r){this.setTransform(this._x,this._y,this._scaleX,this._scaleY,r,this._skewX,this._skewY);},
|
|
|
|
|
get rotation(){return this._rotation},
|
|
|
|
|
set skewX(x){this.setTransform(this._x,this._y,this._scaleX,this._scaleY,this._rotation,x,this._skewY);},
|
|
|
|
|
get skewX(){return this._skewX},
|
|
|
|
|
set skewY(y){this.setTransform(this._x,this._y,this._scaleX,this._scaleY,this._rotation,this._skewX,y);},
|
|
|
|
|
get skewY(){return this._skewY},
|
|
|
|
|
set alpha(a){this.attr("opacity", a.toString())},
|
|
|
|
|
get alpha(){return Number(this.attr("opacity"))>=0?Number(this.attr("opacity")):1},
|
|
|
|
|
set mouseEnabled(Bool){
|
|
|
|
|
if(Bool){
|
|
|
|
|
this.attr("cursor","pointer")
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
get mouseEnabled(){
|
|
|
|
|
return !!this.attr("cursor");
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
n.attr=function (o,d){
|
|
|
|
|
return d?this.node.attr(o,d):this.node.attr(o)
|
|
|
|
|
};
|
|
|
|
|
n.css=function (o,d){
|
2015-07-03 17:00:59 +08:00
|
|
|
|
return d?this.node.css(o,d):this.node.css(o);
|
2015-07-02 13:57:26 +08:00
|
|
|
|
};
|
|
|
|
|
n.children=function (){
|
|
|
|
|
return this.node.children()
|
|
|
|
|
};
|
|
|
|
|
n.find=function (s){
|
|
|
|
|
return this.node.find(s);
|
|
|
|
|
}
|
|
|
|
|
n.addEventListener=function (event,func){
|
|
|
|
|
return this.node.bind(event,func);
|
|
|
|
|
};
|
|
|
|
|
n.bind=function (event,func){
|
|
|
|
|
return this.node.bind(event,func);
|
|
|
|
|
};
|
|
|
|
|
n.setTransform=function(x,y,scaleX,scaleY,rotation,skewX,skewY){
|
|
|
|
|
var x=x||0,y=y||0,scaleX=scaleX>=0?scaleX:1,scaleY=scaleY>=0?scaleY:1,
|
|
|
|
|
rotation=rotation||0,skewX=skewX||0,skewY=skewY||0;
|
|
|
|
|
this._x=x,this._y=y,this._scaleX=scaleX,this._scaleY=scaleY,
|
|
|
|
|
this._rotation=rotation,this._skewX=skewX,this._skewY=skewY;
|
|
|
|
|
var DEG_TO_RAD=Math.PI/180;
|
|
|
|
|
var Matrix={
|
|
|
|
|
a:1,b:0,c:0,d:1,tx:0,ty:0,
|
|
|
|
|
initialize:function(a, b,c,d,tx,ty){
|
|
|
|
|
var a1 = this.a;
|
|
|
|
|
var b1 = this.b;
|
|
|
|
|
var c1 = this.c;
|
|
|
|
|
var d1 = this.d;
|
|
|
|
|
this.a = a*a1+b*c1;
|
|
|
|
|
this.b = a*b1+b*d1;
|
|
|
|
|
this.c = c*a1+d*c1;
|
|
|
|
|
this.d = c*b1+d*d1;
|
|
|
|
|
this.tx = tx*a1+ty*c1+this.tx;
|
|
|
|
|
this.ty = tx*b1+ty*d1+this.ty;
|
|
|
|
|
return this
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
if(rotation%360){
|
|
|
|
|
var r=rotation*DEG_TO_RAD;
|
|
|
|
|
var cos = Math.cos(r);
|
|
|
|
|
var sin = Math.sin(r);
|
|
|
|
|
}else {
|
|
|
|
|
cos = 1;
|
|
|
|
|
sin = 0;
|
|
|
|
|
}
|
|
|
|
|
var t=Matrix;
|
|
|
|
|
if (skewX || skewY) {
|
|
|
|
|
skewX = skewX*DEG_TO_RAD||0;
|
|
|
|
|
skewY = skewY*DEG_TO_RAD||0;
|
|
|
|
|
t.initialize(cos*scaleX, sin*scaleX, -sin*scaleY, cos*scaleY, 0, 0);
|
|
|
|
|
t.initialize(Math.cos(skewY), Math.sin(skewY), -Math.sin(skewX), Math.cos(skewX), x, y);
|
|
|
|
|
} else {
|
|
|
|
|
t.initialize(cos*scaleX, sin*scaleX, -sin*scaleY, cos*scaleY, x, y);
|
|
|
|
|
}
|
|
|
|
|
var val="matrix("+t.a+","+ t.b+","+ t.c+","+ t.d+","+ t.tx+","+ t.ty+")";
|
|
|
|
|
this.attr("transform",val)
|
|
|
|
|
};
|
|
|
|
|
n.addChild=function (elem){
|
|
|
|
|
if(elem.node) this.node.append(elem.node);
|
|
|
|
|
else this.node.append(elem);
|
|
|
|
|
};
|
|
|
|
|
n.clear=function (index){
|
|
|
|
|
if(index>=0){
|
|
|
|
|
this.node.children().eq(index).remove();
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
return this.node.children().remove();
|
|
|
|
|
};
|
|
|
|
|
n.setFilter=function (dom){
|
|
|
|
|
this.attr("filter","url(#"+dom.attr("id")+")")
|
|
|
|
|
};
|
|
|
|
|
n.setClipPath=function(dom){
|
|
|
|
|
this.attr("clip-path","url(#"+dom.attr("id")+")");
|
|
|
|
|
};
|
|
|
|
|
var SectorStr=function (point,r,angle,startAngle,inr){
|
|
|
|
|
angle=(Math.abs(angle) > 360) ? 360 : angle;
|
|
|
|
|
var flag=angle>180?1:0;
|
|
|
|
|
startAngle = startAngle * Math.PI / 180;
|
|
|
|
|
var str="";//"M"+point.x+" "+point.y;
|
|
|
|
|
str+=" M"+(point.x + r * Math.cos(startAngle))+" "+(point.y+r * Math.sin(startAngle))
|
|
|
|
|
var angleA,cx,cy;
|
|
|
|
|
if(angle>=360){
|
|
|
|
|
angleA=angle/2;
|
|
|
|
|
angleA=angleA*Math.PI/180;
|
|
|
|
|
angleA=angleA+startAngle;
|
|
|
|
|
for(var i=0;i<2;i++){
|
|
|
|
|
cx=point.x+r*Math.cos(angleA+i*Math.PI);
|
|
|
|
|
cy=point.y+r*Math.sin(angleA+i*Math.PI);
|
|
|
|
|
str+="A"+r+" "+r+" 0 1 1 "+cx+" "+cy;
|
|
|
|
|
}
|
|
|
|
|
str+=" Z";
|
|
|
|
|
return str;
|
|
|
|
|
}
|
|
|
|
|
angle=angle*Math.PI/180;
|
|
|
|
|
angleA=angle+startAngle;
|
|
|
|
|
|
|
|
|
|
cx = point.x + r * Math.cos(angleA);
|
|
|
|
|
cy = point.y + r * Math.sin(angleA);
|
|
|
|
|
str+="A"+r+" "+r+" 0 "+flag+" 1 "+cx+" "+cy;
|
|
|
|
|
if(angle<Math.PI*2){
|
|
|
|
|
str+=" L"+point.x+" "+point.y
|
|
|
|
|
}
|
|
|
|
|
//画内圆;
|
|
|
|
|
if(inr){
|
|
|
|
|
cx = point.x + inr * Math.cos(angleA);
|
|
|
|
|
cy = point.y + inr * Math.sin(angleA);
|
|
|
|
|
str+="L"+cx+" "+cy;
|
|
|
|
|
cx=point.x + inr * Math.cos(startAngle);
|
|
|
|
|
cy=point.y+ inr * Math.sin(startAngle);
|
|
|
|
|
str+="A"+inr+" "+inr+" 0 "+flag+" 0 "+cx+" "+cy;
|
|
|
|
|
}
|
|
|
|
|
str+=" Z";
|
|
|
|
|
return str
|
|
|
|
|
};
|
|
|
|
|
var Sprite=function (s){
|
|
|
|
|
if(s){
|
|
|
|
|
this.node=$S(s);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
var sp=Sprite.prototype=new s_node();
|
|
|
|
|
|
|
|
|
|
sp.drawRect=function (obj){
|
|
|
|
|
var t=new SVG.Sprite("rect");
|
|
|
|
|
t.attr(obj).appendTo(this.node);
|
|
|
|
|
return t
|
|
|
|
|
};
|
|
|
|
|
sp.drawCirc=function (obj){
|
|
|
|
|
var t=new SVG.Sprite("circle");
|
|
|
|
|
t.attr(obj).appendTo(this.node);
|
|
|
|
|
return t
|
|
|
|
|
};
|
|
|
|
|
sp.drawPolygon=function (obj){
|
|
|
|
|
var t=new SVG.Sprite("polygon");
|
|
|
|
|
t.attr(obj).appendTo(this.node);
|
|
|
|
|
return t
|
|
|
|
|
};
|
|
|
|
|
sp.drawPath=function (obj){
|
|
|
|
|
var t=new SVG.Sprite("path");
|
|
|
|
|
t.attr(obj).appendTo(this.node);
|
|
|
|
|
return t
|
|
|
|
|
};
|
|
|
|
|
sp.drawEllipse=function (obj){
|
|
|
|
|
var t=new SVG.Sprite("ellipse");
|
|
|
|
|
t.attr(obj).appendTo(this.node);
|
|
|
|
|
return t
|
|
|
|
|
};
|
|
|
|
|
sp.drawSector=function (point,r,angle,startAngle,color,line,lineColor){
|
|
|
|
|
var str=SectorStr(point,r,angle,startAngle,1);
|
|
|
|
|
var m=$S("path").attr("fill",color);
|
|
|
|
|
if(line){
|
|
|
|
|
m.attr({stroke:lineColor,"stroke-width":line});
|
|
|
|
|
}
|
|
|
|
|
m.attr("d",str).appendTo(this.node);
|
|
|
|
|
return m
|
|
|
|
|
};
|
|
|
|
|
sp.drawAnnular=function (point,r,inr,angle,startAngle,color,line,lineColor){
|
|
|
|
|
var str=SectorStr(point,r,angle,startAngle,inr);
|
|
|
|
|
var m=$S("path").attr("fill",color);
|
|
|
|
|
if(line){
|
|
|
|
|
m.attr({stroke:lineColor,"stroke-width":line});
|
|
|
|
|
}
|
|
|
|
|
m.attr("d",str).appendTo(this.node);
|
|
|
|
|
return m
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function svg(id){
|
|
|
|
|
this.initialize(id);
|
|
|
|
|
}
|
|
|
|
|
var s=svg.prototype=new Sprite();
|
|
|
|
|
s.initialize=function (id){
|
|
|
|
|
this.node=$S("svg");
|
|
|
|
|
this.attr({"width":"100%","height":"100%"});
|
|
|
|
|
this.defs=new Sprite("defs");
|
|
|
|
|
this.addChild(this.defs);
|
2015-07-03 17:00:59 +08:00
|
|
|
|
if(id)
|
2015-07-02 13:57:26 +08:00
|
|
|
|
$(id).append(this.node);
|
2015-07-03 17:00:59 +08:00
|
|
|
|
else
|
|
|
|
|
return this;
|
2015-07-02 13:57:26 +08:00
|
|
|
|
};
|
|
|
|
|
var filter={
|
|
|
|
|
blur : function (x, y) {
|
|
|
|
|
if (x == null) {
|
|
|
|
|
x = 2;
|
|
|
|
|
}
|
|
|
|
|
var def = y == null ? x : [x, y];
|
|
|
|
|
var t=document.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");
|
|
|
|
|
t.setAttribute("stdDeviation",def);
|
|
|
|
|
var filter=$S("filter");
|
|
|
|
|
filter.attr({x:"-50%",y:"-50%","width":"200%","height":"200%"});
|
|
|
|
|
filter.append(t);
|
|
|
|
|
Object.defineProperty(filter,"id",{
|
|
|
|
|
get:function (){
|
|
|
|
|
return filter.attr("id");
|
|
|
|
|
},
|
|
|
|
|
set:function (id){
|
|
|
|
|
filter.attr("id",id);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return filter
|
|
|
|
|
},
|
|
|
|
|
goo:function (blur){
|
|
|
|
|
var t=document.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");
|
|
|
|
|
t.setAttribute("in","SourceGraphic");
|
|
|
|
|
t.setAttribute("stdDeviation",blur);
|
|
|
|
|
t.setAttribute("result","blur");
|
|
|
|
|
var matrix=document.createElementNS("http://www.w3.org/2000/svg","feColorMatrix");
|
|
|
|
|
matrix.setAttribute("in","blur");
|
|
|
|
|
matrix.setAttribute("mode","matrix");
|
|
|
|
|
matrix.setAttribute("values","1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -6");
|
|
|
|
|
matrix.setAttribute("result","goo");
|
|
|
|
|
var com=document.createElementNS("http://www.w3.org/2000/svg","feComposite");
|
|
|
|
|
com.setAttribute("in","SourceGraphic");
|
|
|
|
|
com.setAttribute("in2","goo");
|
|
|
|
|
com.setAttribute("operator","atop");
|
|
|
|
|
var filter=$S("filter");
|
|
|
|
|
filter.append([t,matrix,com]);
|
|
|
|
|
return filter
|
|
|
|
|
},
|
|
|
|
|
mask:function (tb,obj){
|
|
|
|
|
var t=$S(tb);
|
|
|
|
|
t.attr(obj);
|
|
|
|
|
var cp=$S("clipPath");
|
|
|
|
|
cp.append(t);
|
|
|
|
|
Object.defineProperty(cp,"id",{
|
|
|
|
|
get:function (){
|
|
|
|
|
return cp.attr("id");
|
|
|
|
|
},
|
|
|
|
|
set:function (id){
|
|
|
|
|
cp.attr("id",id);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//var cp=document.createElementNS("http://www.w3.org/2000/svg","clipPath");//$S("clippath");
|
|
|
|
|
//cp.appendChild(t[0]);
|
|
|
|
|
//Object.defineProperty(cp,"id",{
|
|
|
|
|
// get:function (){
|
|
|
|
|
// return cp.getAttribute("id");
|
|
|
|
|
// },
|
|
|
|
|
// set:function (id){
|
|
|
|
|
// cp.setAttribute("id",id);
|
|
|
|
|
// }
|
|
|
|
|
//});
|
|
|
|
|
return cp;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
var text=function (_text,_data){
|
|
|
|
|
this.node=$S("text");
|
|
|
|
|
this.node.text(_text);
|
|
|
|
|
if(_data){
|
|
|
|
|
this.node.attr(_data);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
var t=text.prototype=new s_node;
|
|
|
|
|
t.tspan=function (_text,_data){
|
|
|
|
|
this.node=$S("tspan");
|
|
|
|
|
this.node.text(_text);
|
|
|
|
|
if(_data){
|
|
|
|
|
this.node.attr(_data);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
var ts= t.tspan.prototype=new s_node();
|
|
|
|
|
|
|
|
|
|
svg.SectorStr=SectorStr;
|
|
|
|
|
svg.filter=filter;
|
|
|
|
|
svg.Sprite=Sprite;
|
|
|
|
|
svg.Text=text;
|
|
|
|
|
svg.Text.tSpan= t.tspan;
|
|
|
|
|
return svg
|
|
|
|
|
}());
|
|
|
|
|
var Point=function (x,y){
|
|
|
|
|
this.x=x;
|
|
|
|
|
this.y=y;
|
|
|
|
|
return this;
|
|
|
|
|
};
|
|
|
|
|
var T=TweenMax;
|
2015-07-03 17:39:13 +08:00
|
|
|
|
var _playBox=function (svg,startFunc,pauseFunc){
|
2015-07-03 17:00:59 +08:00
|
|
|
|
var playBox=new SVG.Sprite("g");
|
|
|
|
|
playBox.mouseEnabled=true;
|
|
|
|
|
|
|
|
|
|
playBox.drawRect({width:"100%",height:"100%",fill:"rgba(0,0,0,.35)"});
|
|
|
|
|
var playBtn=new SVG.Sprite("g");
|
|
|
|
|
playBox.addChild(playBtn);
|
|
|
|
|
playBtn.drawCirc({r:30,fill:"rgba(255,255,255,1)"});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var playPoints={
|
|
|
|
|
play:"M-10 -15 L15 0 L-10 15 L-10 0Z M-10 -15 L15 0 L-10 15 L-10 0Z",
|
|
|
|
|
pause:"M-12 -15 L-3 -15 L-3 15 L-12 15Z M3 -15 L12 -15 L12 15 L3 15Z"
|
|
|
|
|
};
|
|
|
|
|
var shanjiao=playBtn.drawPath({d:playPoints.play,fill:"#999"});
|
|
|
|
|
var bBool=false;
|
|
|
|
|
var animate_p3 = function(p,_arr) {
|
|
|
|
|
var a_arr=[];
|
|
|
|
|
for(var i=0;i<_arr.length;i++){
|
|
|
|
|
a_arr.push(_arr[i].x,_arr[i].y)
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<a_arr.length;i++){
|
|
|
|
|
if(i==0||i==8){
|
|
|
|
|
a_arr[i]="M"+a_arr[i];
|
|
|
|
|
}else if(i==2||i==4||i==6||i==12||i==14){
|
|
|
|
|
a_arr[i]="L"+a_arr[i];
|
|
|
|
|
}else if(i==7||i==15){
|
|
|
|
|
a_arr[i]=a_arr[i]+"Z";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
p.attr({
|
|
|
|
|
d: a_arr.join().replace(/,/g," ")
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
function twennBtn(p,arr,c_arr){
|
|
|
|
|
for(var i=0;i<arr.length;i++){
|
|
|
|
|
T.killTweensOf(arr[i]);
|
|
|
|
|
T.to(arr[i],.6,{x:c_arr[i].x ,y:c_arr[i].y ,delay:Math.random() *.2,onUpdate:animate_p3,onUpdateParams:[p,arr],ease:Elastic.easeOut})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
playBox.addEventListener("click",function (e){
|
|
|
|
|
var _a= playPoints.play.replace( /[MLZ]/g,"").split(" ");
|
|
|
|
|
var _b= playPoints.pause.replace( /[MLZ]/g,"").split(" ");
|
|
|
|
|
var _arr=[],_barr=[];
|
|
|
|
|
for(var i=0;i<_a.length;i+=2){
|
|
|
|
|
var a={},b={};
|
|
|
|
|
a.x=_a[i];
|
|
|
|
|
a.y=_a[i+1];
|
|
|
|
|
b.x=_b[i];
|
|
|
|
|
b.y=_b[i+1];
|
|
|
|
|
_arr.push(a);
|
|
|
|
|
_barr.push(b);
|
|
|
|
|
}
|
|
|
|
|
if(!bBool){
|
|
|
|
|
twennBtn(shanjiao,_arr,_barr);
|
|
|
|
|
T.to(playBox,.5,{delay:.3,alpha:0,onComplete:startFunc});
|
|
|
|
|
bBool=true;
|
|
|
|
|
}else{
|
|
|
|
|
twennBtn(shanjiao,_barr,_arr);
|
|
|
|
|
T.to(playBox,.5,{alpha:1,onStart:pauseFunc});
|
|
|
|
|
bBool=false
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
function resize(){
|
|
|
|
|
playBtn.x=svg.node.width()/2;
|
|
|
|
|
playBtn.y=svg.node.height()/2;
|
|
|
|
|
};
|
|
|
|
|
resize();
|
|
|
|
|
$(window).bind("resize", resize);
|
|
|
|
|
return playBox;
|
|
|
|
|
};
|
2015-07-02 13:57:26 +08:00
|
|
|
|
var newMotion=function (id,obj){
|
|
|
|
|
if(!id||!obj){
|
|
|
|
|
throw new Error("数据错误");
|
|
|
|
|
}
|
|
|
|
|
var self=this;
|
|
|
|
|
self.box=$(id);
|
|
|
|
|
self.box.css({"width":800});
|
|
|
|
|
if(self.box.width()<500){
|
|
|
|
|
self.box.css("height",600);
|
|
|
|
|
}else{
|
|
|
|
|
self.box.css("height",300)
|
|
|
|
|
}
|
|
|
|
|
self.data=obj;
|
|
|
|
|
self.svg=new SVG(id);
|
|
|
|
|
self.svg.css("background-color","#f3f3f3");
|
|
|
|
|
self.w=self.box.width();
|
|
|
|
|
self.h=self.box.height();
|
|
|
|
|
self.tweenArr=[];
|
|
|
|
|
self.t_time=1;
|
|
|
|
|
self.d_time=.5;
|
|
|
|
|
self.tweenAllTime=2.5;
|
|
|
|
|
|
|
|
|
|
self.addElement();
|
|
|
|
|
|
|
|
|
|
function resize(e){
|
|
|
|
|
self.windowResize(self)
|
|
|
|
|
}
|
|
|
|
|
resize();
|
|
|
|
|
$(window).bind("resize", resize);
|
|
|
|
|
};
|
|
|
|
|
var nm=newMotion.prototype={
|
|
|
|
|
};
|
|
|
|
|
nm.windowResize=function (self){
|
|
|
|
|
var s=self.box.parent().width()/800>1?1:self.box.parent().width()/800;
|
|
|
|
|
self.box.css({"transform": "scale("+s+")","transform-origin":"0 0"});
|
|
|
|
|
};
|
|
|
|
|
nm.addElement=function (){
|
|
|
|
|
var self=this;
|
|
|
|
|
//绘制坐标系统;
|
|
|
|
|
self.coords=new SVG.Sprite("g");
|
|
|
|
|
self.svg.addChild(self.coords);
|
|
|
|
|
var coordsStr="M80 50 L80 250 L480 250";
|
|
|
|
|
self.coords.drawPath({d:coordsStr,fill:"none","stroke-width":2,stroke:"#d9d9d9"});
|
|
|
|
|
var timerTxt=new SVG.Text("timer",{fill:"#999"});
|
|
|
|
|
self.coords.addChild(timerTxt);
|
|
|
|
|
timerTxt.x=240;
|
|
|
|
|
timerTxt.y=275;
|
|
|
|
|
var yaxis=new SVG.Text("Y-axis",{fill:"#999"});
|
|
|
|
|
yaxis.width=20;
|
|
|
|
|
yaxis.x=20;
|
|
|
|
|
yaxis.y=150;
|
|
|
|
|
self.coords.addChild(yaxis);
|
|
|
|
|
//动画示例元素;
|
|
|
|
|
self.tweenMc=new SVG.Sprite("g");
|
|
|
|
|
if(self.data.mask){
|
|
|
|
|
var mask=new SVG.filter.mask("rect",{width:260,height:200});
|
|
|
|
|
mask.id="mask";
|
|
|
|
|
self.svg.defs.addChild(mask);
|
|
|
|
|
self.tweenMc.setClipPath(mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.svg.addChild(self.tweenMc);
|
|
|
|
|
self.tweenMc.x=500;
|
|
|
|
|
self.tweenMc.y=50;
|
|
|
|
|
//坐标线;
|
|
|
|
|
/**
|
|
|
|
|
* 以三次贝塞尔曲线
|
|
|
|
|
* 时间长4秒
|
|
|
|
|
* -分三段-
|
|
|
|
|
* 前缓动--linear--后缓动
|
|
|
|
|
* 1--.5--1
|
|
|
|
|
*/
|
|
|
|
|
var c_w=360,c_h=180,
|
|
|
|
|
c_x=100,c_y=250,ct_y=70,
|
|
|
|
|
t_w=c_w/ self.tweenAllTime,tt_w=t_w+c_x,d_w=(self.t_time+self.d_time)/self.tweenAllTime;
|
|
|
|
|
|
|
|
|
|
for(var i=0;i<self.data.lineData.length;i++){
|
|
|
|
|
var tb=new SVG.Sprite("g");
|
|
|
|
|
self.coords.addChild(tb);
|
|
|
|
|
var str="M80 250";
|
|
|
|
|
var open=self.data.lineData[i].open;
|
|
|
|
|
if(open.length!==4&&open.length!==0){
|
|
|
|
|
throw new Error(open+"数据错误");
|
|
|
|
|
}
|
|
|
|
|
if(open.length!==0){
|
|
|
|
|
str+="L100 250"+"C"+(open[0]*t_w+c_x)+","+(c_y-open[1]*c_h)+" "+(open[2]*t_w+c_x)+","+(c_y-open[3]*c_h)+" "+tt_w+","+ct_y
|
|
|
|
|
}else{
|
|
|
|
|
str+="L100 250"+"L"+tt_w+","+ct_y;
|
|
|
|
|
}
|
|
|
|
|
tb.drawPath({d:str,fill:"none","stroke-width":2,stroke:self.data.lineData[i].stroke||"#999","stroke-dasharray":"0 100%"});
|
|
|
|
|
|
|
|
|
|
var e_x=c_w*d_w+c_x;
|
|
|
|
|
str="M"+tt_w+","+ct_y+"L"+e_x+","+ct_y;
|
|
|
|
|
tb.drawPath({d:str,fill:"none","stroke-width":2,stroke:self.data.lineData[i].stroke||"#999","stroke-dasharray":"0 100%"});
|
|
|
|
|
var end=self.data.lineData[i].end;
|
|
|
|
|
if(end.length!==4&&end.length!==0){
|
|
|
|
|
throw new Error(end+"数据错误");
|
|
|
|
|
}
|
|
|
|
|
str="M"+e_x+","+ct_y;
|
|
|
|
|
if(end.length!==0){
|
|
|
|
|
str+="C"+(end[0]*t_w+e_x)+","+(end[1]*c_h+ct_y)+" "+(end[2]*t_w+e_x)+","+(end[3]*c_h+ct_y)+" "+(c_w+c_x-20)+","+c_y+"L"+(c_w+c_x)+","+c_y
|
|
|
|
|
}else{
|
|
|
|
|
if(self.data.lineData[i].endEaseName!=="null"){
|
|
|
|
|
str+="L"+(c_w+c_x-20)+","+c_y+"L"+(c_w+c_x)+","+c_y;
|
|
|
|
|
}else{
|
|
|
|
|
str+="L"+e_x+","+ct_y;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
tb.drawPath({d:str,fill:"none","stroke-width":2,stroke:self.data.lineData[i].stroke||"#999","stroke-dasharray":"0 100%"});
|
|
|
|
|
|
|
|
|
|
//元素插入盒子里;
|
|
|
|
|
var circ=new SVG.Sprite("circle");
|
|
|
|
|
circ.attr({"r":10,fill:"none","stroke-width":6,stroke:self.data.lineData[i].stroke||"#999"});
|
|
|
|
|
self.tweenMc.addChild(circ);
|
|
|
|
|
if(self.data.exposure=="left"||!self.data.exposure){
|
|
|
|
|
circ.x=self.data.mask?-20:20;
|
|
|
|
|
circ.y=50+i*110//self.data.mask?240:180;
|
|
|
|
|
}else if(self.data.exposure=="top"){
|
|
|
|
|
circ.x=100+i*100//self.data.mask?-20:20;
|
|
|
|
|
circ.y=self.data.mask?-20:20;
|
|
|
|
|
}else if(self.data.exposure=="right"){
|
|
|
|
|
circ.x=self.data.mask?280:220;
|
|
|
|
|
circ.y=50+i*110//self.data.mask?240:180;
|
|
|
|
|
}else{
|
|
|
|
|
circ.x=100+i*100//self.data.mask?-20:20;
|
|
|
|
|
circ.y=self.data.mask?240:180;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//建播放按钮;
|
2015-07-03 17:00:59 +08:00
|
|
|
|
self.playBox=_playBox(self.svg,function (){
|
|
|
|
|
self.start(self);
|
|
|
|
|
},function (){
|
|
|
|
|
self.pause(self);
|
2015-07-02 13:57:26 +08:00
|
|
|
|
});
|
2015-07-03 17:00:59 +08:00
|
|
|
|
self.svg.addChild(self.playBox);
|
2015-07-02 13:57:26 +08:00
|
|
|
|
};
|
|
|
|
|
nm.pause=function (self){
|
|
|
|
|
for(var i=0;i<self.tweenArr.length;i++){
|
|
|
|
|
var tl=self.tweenArr[i];
|
|
|
|
|
tl.pause();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
nm.resume=function (self){
|
|
|
|
|
for(var i=0;i<self.tweenArr.length;i++){
|
|
|
|
|
var tl=self.tweenArr[i];
|
|
|
|
|
tl.resume();
|
|
|
|
|
}
|
|
|
|
|
};
|
2015-07-03 17:00:59 +08:00
|
|
|
|
nm.start=function (self){
|
2015-07-02 13:57:26 +08:00
|
|
|
|
if(self.tweenArr.length){
|
|
|
|
|
self.resume(self);
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var lineBox=self.coords.find("g");
|
|
|
|
|
for(var i=0;i<lineBox.length;i++){
|
|
|
|
|
var m=lineBox.eq(i);
|
|
|
|
|
var tl=new TimelineMax({repeat:-1,repeatDelay:1});
|
|
|
|
|
self.tweenArr.push(tl);
|
|
|
|
|
for(var ii=0;ii< m.find("path").length;ii++){
|
|
|
|
|
var p=m.find("path").eq(ii);
|
|
|
|
|
var lineLength=p[0].getTotalLength();
|
|
|
|
|
var time= 1,_ease=Power2.easeInOut;
|
|
|
|
|
|
|
|
|
|
if(ii==0){
|
|
|
|
|
time= self.t_time;
|
|
|
|
|
_ease=EaseLookup.find(self.data.lineData[i].openEaseName);
|
|
|
|
|
}
|
|
|
|
|
else if(ii==1){
|
|
|
|
|
time= self.d_time;
|
|
|
|
|
_ease=Power0.easeNone;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
time= self.t_time;
|
|
|
|
|
_ease=EaseLookup.find(self.data.lineData[i].endEaseName);
|
|
|
|
|
}
|
|
|
|
|
if(!self.data.lineData[i].open.length){
|
|
|
|
|
_ease=Linear.easeNone;
|
|
|
|
|
}
|
|
|
|
|
tl.add(T.to(p,time,{"stroke-dasharray":lineLength+" 100%",ease:_ease}))
|
|
|
|
|
//tl.to(p,time,{"stroke-dasharray":"100% 100%",ease: Power2.easeInOut})
|
|
|
|
|
}
|
|
|
|
|
//circ动画
|
|
|
|
|
var ctl=new TimelineMax({repeat:-1,repeatDelay:1});
|
|
|
|
|
var ciric=self.tweenMc.children().eq(i);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var oease=self.data.lineData[i].open.length?EaseLookup.find(self.data.lineData[i].openEaseName):Power0.easeNone,
|
|
|
|
|
eease=self.data.lineData[i].end.length?EaseLookup.find(self.data.lineData[i].endEaseName):Power0.easeNone;
|
|
|
|
|
//console.log(self.data.lineData[i].open,oease,eease,i);
|
|
|
|
|
//if(self.data.lineData[i].openEaseName=="Bounce.easeOut")
|
|
|
|
|
if(self.data.lineData[i].openEaseName&&self.data.lineData[i].openEaseName.indexOf("Bounce")>=0){
|
|
|
|
|
if(self.data.lineData[i].openEaseName.indexOf("InOut")>=0){
|
|
|
|
|
oease=Bounce.easeInOut
|
|
|
|
|
}else if(self.data.lineData[i].openEaseName.indexOf("In")>=0){
|
|
|
|
|
oease=Bounce.easeIn
|
|
|
|
|
}else{
|
|
|
|
|
oease=Bounce.easeOut
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var cx={},_x={};
|
|
|
|
|
if(self.data.exposure=="left"||!self.data.exposure){
|
|
|
|
|
_x={x:240};
|
|
|
|
|
cx={x:self.data.mask?-20:20};
|
|
|
|
|
}else if(self.data.exposure=="top"){
|
|
|
|
|
_x={y:180};
|
|
|
|
|
cx={y:self.data.mask?-20:20};
|
|
|
|
|
}else if(self.data.exposure=="right"){
|
|
|
|
|
_x={x:20};
|
|
|
|
|
cx={x:self.data.mask?280:220};
|
|
|
|
|
}else{
|
|
|
|
|
_x={y:20};
|
|
|
|
|
cx={y:self.data.mask?240:180};
|
|
|
|
|
}
|
|
|
|
|
if(self.data.lineData[i].endEaseName!=="null"){
|
|
|
|
|
_x.ease=oease,cx.ease=eease,cx.delay=self.d_time;
|
|
|
|
|
}else{
|
|
|
|
|
var t=cx;
|
|
|
|
|
cx={};
|
|
|
|
|
cx.startAt= t;
|
|
|
|
|
cx.delay=self.d_time;
|
|
|
|
|
_x.ease=oease,cx.ease=eease;
|
|
|
|
|
}
|
|
|
|
|
ctl.to(ciric,self.t_time,_x).to(ciric,self.t_time,cx);
|
|
|
|
|
self.tweenArr.push(ctl);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
window.Motion=newMotion;
|
|
|
|
|
|
2015-07-03 17:00:59 +08:00
|
|
|
|
var motionVideo={
|
|
|
|
|
init:function (){
|
|
|
|
|
var self=this;
|
|
|
|
|
self.videoBox=$(".video-player");
|
|
|
|
|
for(var i=0;i<self.videoBox.length;i++){
|
|
|
|
|
var svg=new SVG();
|
|
|
|
|
self.videoBox.eq(i).append(svg.node);
|
|
|
|
|
var video=self.videoBox.eq(i).find("video");
|
|
|
|
|
video.css({"width":"100%"});
|
|
|
|
|
video.append(svg);
|
|
|
|
|
svg.css({"position":"absolute","top":0});
|
|
|
|
|
var playBox=_playBox(svg);
|
|
|
|
|
svg.addChild(playBox);
|
|
|
|
|
playBox.addEventListener("click",function (e){
|
|
|
|
|
var m=$(this),
|
|
|
|
|
video= m.parent().parent().find("video");
|
|
|
|
|
var bool=m.attr("play");
|
|
|
|
|
if(bool){
|
|
|
|
|
this.setTimeout=null;
|
|
|
|
|
video[0].pause();
|
|
|
|
|
m.removeAttr("play")
|
|
|
|
|
}else{
|
|
|
|
|
this.setTimeout=setTimeout(function (){
|
|
|
|
|
video[0].play();
|
|
|
|
|
},500);
|
|
|
|
|
|
|
|
|
|
m.attr("play","true")
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
motionVideo.init();
|
2015-07-02 13:57:26 +08:00
|
|
|
|
});
|