webgl过场效果2

<!DOCTYPE html>
<html lang="en">	
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>        
<title>test</title>
<style type="text/css">
body {
margin: 0px;
overflow: hidden;
background:#000;
}
#view{position:absolute;left:0;top:0}
#btn{position:absolute;width:250px;height:60px;text-align:center;line-height:60px;color:#ffffff;left:200px;top:300px;cursor:pointer;background:rgba(0,0,0,0.5)}

</style>
</head>
<body>
<div id="view"></div>
<div id="btn">点击显示切换效果</div>
<script src="http://h5.skyfish.me/comm/js/zepto.min.js"></script>
<script src="pixi.min.js"></script>
<script src="js/TweenMax.min.js"></script>
<script type="text/javascript">
var requestAnimFrame = (function () {
    return window.requestAnimationFrame || (window).webkitRequestAnimationFrame || (window).mozRequestAnimationFrame || (window).oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {
        window.setTimeout(callback, 1000 / 60, new Date().getTime());
    };
})();
var renderer,stage,imgCon,displacementMap,displacementMap2;
var crossfade = {
	vertexShader: ["attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "varying vec2 vTextureCoord;", "uniform mat3 projectionMatrix;", "void main() {", "gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);", "vTextureCoord = aTextureCoord;", "}"].join("\n"),
	fragmentShader: [
	"precision highp float;",
	 "varying vec2 vTextureCoord;",
	 "uniform sampler2D uSampler;",
	 "uniform sampler2D displacementMap;",
	 "uniform sampler2D displacementMap2;",
	 "uniform float time;",
	 "uniform float elapsed;",
	 "uniform float width;",
	 "uniform vec2 resolution;",
	 "uniform float scale;",
	 "float snoise(vec2 co, float seed) {",
	 "return fract(sin(dot(co * seed, vec2(12.9898, 78.233))) * 43758.5453);",
	 "}",
	 "void main() {",
	 "vec2 repeat = vec2(scale, scale * resolution.y / resolution.x);",
	 "vec2 uv = gl_FragCoord.xy / vec2(resolution.x, resolution.y);",
	 "vec2 vCoord = fract(uv.xy * repeat.xy);",
	 "vec4 displacement1 = texture2D( displacementMap, vCoord);",
	 "vec4 displacement2 = texture2D( displacementMap2, vCoord);",
	 "vec4 displacement = mix(displacement1, displacement2, vec4(time));",
	 "vec2 mixTexture = mix(displacement.xy, vTextureCoord.xy, vec2(time));",
	 "vec2 testPos1 = mixTexture + (1.0 - time) * displacement.xy * 0.5;",
	 "vec2 testPos = mix(testPos1, vec2(1.0), vec2(1.0 - time));",
	 "vec2 distUv = vec2(testPos.x,vTextureCoord.y);",
	 "float noise = snoise(distUv, elapsed);",
	 "vec4 color = texture2D(uSampler, distUv);",
	 "gl_FragColor = vec4(mix(color, vec4(vec3(color * noise), 0.0), 0.18));",
	 "}"
	].join("\n"),
	val:0
};
var shader;
var w = $(window).width();
var h = $(window).height();
var isAni=false;
var isShow=true;
function init() {
	try {
		renderer = PIXI.autoDetectRenderer(w, h,{transparent: true});
	} catch(e) {
		renderer = new PIXI.CanvasRenderer(w, h,{transparent: true});
	}
	document.getElementById('view').appendChild(renderer.view);
	stage = new PIXI.Container();
	imgCon = new PIXI.DisplayObjectContainer();
	stage.addChild(imgCon);
	var bg = new PIXI.Sprite.fromImage('b.jpg');
	imgCon.addChild(bg);
	displacementMap = new PIXI.Texture.fromImage("displacement-map3.png");
        displacementMap2 = new PIXI.Texture.fromImage("displacement-map2.png");
	var uniform = {
		time: {
		    type: "f",
		    value: 1
		},
		elapsed: {
		    type: "f",
		    value: 1
		},
		scale: {
		    type: "f",
		    value: 1
		},
		displacementMap: {
		    type: "sampler2D",
		    value: displacementMap
		},
		displacementMap2: {
		    type: "sampler2D",
		    value:displacementMap2
		},
		resolution: {
		    type: "v2",
		    value: [w, h]
		}
	}
	var s = crossfade.vertexShader;
	var f = crossfade.fragmentShader;
	shader = new PIXI.AbstractFilter(s,f,uniform);
        imgCon.filters = [shader];
}
function animate() {
	shader.uniforms.elapsed +=0.01;
	if(isAni) {
		shader.uniforms.time =1-crossfade.val;
	}
	renderer.render(stage);
	requestAnimFrame(animate);
}
init();
animate();
$('#btn').click(function(){
	isAni=true;
	if(isShow) {
		isShow=false;
		TweenMax.to(crossfade, h <= 1056 ? 3 : 2.4, {
			val: h <= 1056 ? 1 : .5,
			ease: Quint.easeInOut,
			onComplete: function() {
				crossfade.val = 1;
				isAni=false;
			}
		});
	} else {
		isShow=true;
		TweenMax.to(crossfade, 2.4, {
			val: 0,
			ease: Quint.easeOut,
			onComplete: function() {
				crossfade.val = 0;
				isAni=false;
			}
		});
	}
});
</script>
</body>
</html>