js实现的页面矩阵图形变换特效
本文实例讲述了js实现的页面矩阵图形变换特效。分享给大家供大家参考,具体如下:
运行效果截图如下:
具体代码如下:
<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/>
<title>matrix</title>
<styletype="text/css">
body{
margin:0;padding:0;background:black;
}
.rect{
background:green;
}
.arc{
border-radius:5px;background:green;box-shadow:2pxsolid#fff;
}
ul{
list-style:none;margin:0;padding:0;position:absolute;
}
li{
width:20px;height:20px;position:absolute;
}
h1{
text-align:center;line-height:150px;font-size:150px;color:green;
}
</style>
</head>
<body>
<h1>Chrome下兼容</h1>
</body>
<scripttype="text/javascript">
varbody=document.getElementsByTagName("body")[0];
functiongetColor(){
varcolor="rgb(";
color+=(10+Math.round(Math.random()*245));
color+=",";
color+=(10+Math.round(Math.random()*245));
color+=",";
color+=(10+Math.round(Math.random()*245));
color+=")";
returncolor;
}
varmatrixData=[
[1,0,0,0,1],
[0,1,0,1,0],
[0,0,1,0,0],
[0,1,0,1,0],
[1,0,0,0,1]
];
varmatrixData2=[
[0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0],//1
[0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1],//2
[0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1],//3
[0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0],//4
[0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0],//5
[0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0],//6
[0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0],//7
[0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,0],//8
[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1],//9
[1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1],//9
[1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1],//10
[1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1],//11
[0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1],//12
[0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0]//13
];
functioncreateDom(attrs){
vardom=document.createElement(attrs.tagName);
attrs.style?dom.setAttribute("style",attrs.style):void(0);
attrs.on?dom.setAttribute("data-on",attrs.on):void(0);
returndom;
}
varulList=[];
varwidth=window.innerWidth;
varheight=window.innerHeight;
varcols=Math.floor(width/120);
varrows=Math.floor(height/120);
varxOffset=Math.floor((width%120)/2);
functioncreateFlyer(attrs){
variLength=matrixData.length,
jLength=matrixData[0].length,
radius=20,
ul=null,
bgColor=getColor();
ul=createDom({tagName:"ul",style:"height:"+iLength*radius+"px;width:"+jLength*radius+"px;left:"+attrs.left+"px;top:"+attrs.top+"px"});
document.body.appendChild(ul);
for(vari=0;i<5;i++){
var_data=matrixData[i];
for(varj=0;j<5;j++){
varstyle="width:"+radius+"px;height:"+radius+"px;left:"+j*radius+"px;top:"+i*radius+"px;background:"+(_data[j]==0?"transparent":bgColor);
varli=createDom({tagName:"li",style:style,on:_data[j]?1:0});
ul.appendChild(li);
}
}
ulList.push(ul);
}
for(vari=0;i<cols;i++){
for(varj=0;j<rows;j++){
createFlyer({left:i*120+xOffset,top:120*j});
}
}
functionsetULBgColor(dom,color){
varlis=dom.getElementsByTagName("li");
for(vari=0,length=lis.length;i<length;i++){
var_li=lis[i];
console.log(_li.getAttribute("data-on"));
_li.getAttribute("data-on")?_li.style.backgroundColor=color:void(0);
}
}
functionreset(fn){
varlastIndex=ulList.length-1;
for(vari=0,length=ulList.length;i<length;i++){
varul=ulList[i];
(function(i,ul){
setTimeout(function(){
setULBgColor(ul,getColor());
if(i===lastIndex){
fn?fn():void(0);
}
},i*30);
})(i,ul);
}
};
functionfirstStep(){
varcolor=getColor();
varlastIndex=ulList.length-1;
for(vari=0,length=ulList.length;i<length;i++){
varul=ulList[i];
(function(i,ul){
setTimeout(function(){
setULBgColor(ul,color);
if(i==lastIndex){
secondStep();
}
},i*30);
})(i,ul);
}
}
functionsecondStep(){
reset(thirdStep);
}
functionthirdStep(){
varangle=0;
varaddAngle=15;
varinterval=setInterval(function(){
angle+=addAngle;
if(angle>720){
angle=0;
clearInterval(interval);
createMatrix2();
}
for(vari=0,length=ulList.length;i<length;i++){
varul=ulList[i];
ul.style.webkitTransform="rotate("+angle+"deg)";
}
},50);
}
functioncreateMatrix2(){
body.innerHTML="";
variLength=matrixData2.length,
jLength=matrixData2[0].length,
radius=20,
ul=null,
height=jLength*radius,
width=iLength*radius,
bgColor=getColor(),
left=(window.innerWidth-width)/2,
top=(window.innerHeight-height)/2
console.log(window.innerWidth);
console.log(width);
ul=createDom({tagName:"ul",style:"height:"+iLength*radius+"px;width:"+jLength*radius+"px;left:"+left+"px;top:"+top+"px"});
document.body.appendChild(ul);
for(vari=0;i<iLength;i++){
var_data=matrixData2[i];
for(varj=0;j<jLength;j++){
varstyle="width:"+radius+"px;height:"+radius+"px;left:"+j*radius+"px;top:"+i*radius+"px;background:"+(_data[j]==0?"transparent":getColor());
varli=createDom({tagName:"li",style:style,on:_data[j]?1:0});
li.className="arc";
ul.appendChild(li);
}
}
ul.style.webkitTransform="scale(0.1,0.1)";
varscale=0.1;
varinterval=setInterval(function(){
ul.style.webkitTransform="scale("+scale+","+scale+")";
scale+=0.1;
if(scale>1){
clearInterval(interval);
}
},50);
}
firstStep();
</script>
</html>
更多关于js特效相关内容感兴趣的读者可查看本站专题:《jQuery动画与特效用法总结》及《jQuery常见经典特效汇总》
希望本文所述对大家JavaScript程序设计有所帮助。