github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/themes/wind/static/libs/abplayer/demos/periodic_video.html (about) 1 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> 7 <title>three.js css3d - periodic video table</title> 8 <style> 9 html, body { 10 height: 100%; 11 } 12 13 body { 14 background-color: #000000; 15 margin: 0; 16 font-family: Helvetica, sans-serif;; 17 overflow: hidden; 18 } 19 20 a { 21 color: #ffffff; 22 } 23 24 #info { 25 position: absolute; 26 width: 100%; 27 color: #ffffff; 28 padding: 5px; 29 font-family: Monospace; 30 font-size: 13px; 31 font-weight: bold; 32 text-align: center; 33 z-index: 1; 34 } 35 36 #menu { 37 position: absolute; 38 bottom: 20px; 39 width: 100%; 40 text-align: center; 41 } 42 43 .element { 44 padding:3px; 45 box-shadow: 0px 0px 12px rgba(0,255,255,0.5); 46 border: 1px solid rgba(127,255,255,0.25); 47 text-align: center; 48 cursor: default; 49 } 50 51 .element:hover { 52 box-shadow: 0px 0px 12px rgba(0,255,255,0.75); 53 border: 1px solid rgba(127,255,255,0.75); 54 } 55 56 button { 57 color: rgba(127,255,255,0.75); 58 background: transparent; 59 outline: 1px solid rgba(127,255,255,0.75); 60 border: 0px; 61 padding: 5px 10px; 62 cursor: pointer; 63 } 64 button:hover { 65 background-color: rgba(0,255,255,0.5); 66 } 67 button:active { 68 color: #000000; 69 background-color: rgba(0,255,255,0.75); 70 } 71 </style> 72 </head> 73 <body> 74 <script src="http://threejs.org/build/three.min.js"></script> 75 <script src="http://threejs.org/examples/js/libs/tween.min.js"></script> 76 <script src="http://threejs.org/examples/js/controls/TrackballControls.js"></script> 77 <script src="http://threejs.org/examples/js/renderers/CSS3DRenderer.js"></script> 78 <!--Mine--> 79 <link rel="stylesheet" href="../css/base.min.css?1" /> 80 <script src="../js/CommentCoreLibrary.min.js"></script> 81 <script src="../js/ABPlayer.min.js"></script> 82 <!--/Mine--> 83 <div id="container"></div> 84 <div id="info">Adapted From <a href="http://threejs.org" target="_blank">three.js css3d</a> - periodic table. <a href="https://plus.google.com/113862800338869870683/posts/QcFk5HrWran" target="_blank">original author</a>. Modified by jabbany to adapt <a href="http://jabbany.github.io/ABPlayerHTML5/build/">ABPlayerHTML5</a>. It works!</div> 85 <div id="menu"> 86 <button id="table">TABLE</button> 87 <button id="sphere">SPHERE</button> 88 <button id="helix">HELIX</button> 89 <button id="grid">GRID</button> 90 </div> 91 92 <script> 93 var $ = function(e){return document.getElementById(e);} 94 var table = []; 95 96 97 var camera, scene, renderer; 98 var controls; 99 100 var objects = []; 101 var targets = { table: [], sphere: [], helix: [], grid: [] }; 102 103 window.addEventListener("load",function(){ 104 init(); 105 animate(); 106 }); 107 108 function init() { 109 table = [ 110 $("v1"),0,0, 111 $("v2"),0,1, 112 $("v3"),1,0, 113 $("v4"),1,1, 114 ]; 115 camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 ); 116 camera.position.z = 2500; 117 118 scene = new THREE.Scene(); 119 120 // table 121 122 for ( var i = 0; i < table.length; i += 3 ) { 123 124 var element = document.createElement( 'div' ); 125 element.className = "element"; 126 // this will be teh video 127 console.log(table[i]); 128 var inst = ABP.create(element, { 129 "src":table[i], 130 "width":672, 131 "height":510 132 }); 133 134 (function(){ 135 var x = inst; 136 return function(){ 137 x.btnPlay.addEventListener("click",function(){ 138 x.cmManager.setBounds(); 139 }); 140 }; 141 })()(); 142 143 switch(Math.round(i / 3)){ 144 case 1: 145 CommentLoader("../comment.xml", inst.cmManager); 146 break; 147 case 3: 148 CommentLoader("hanabi.xml", inst.cmManager); 149 break; 150 } 151 //inst.btnPlay.click(); 152 153 var object = new THREE.CSS3DObject( element ); 154 object.position.x = Math.random() * 4000 - 2000; 155 object.position.y = Math.random() * 4000 - 2000; 156 object.position.z = Math.random() * 4000 - 2000; 157 scene.add( object ); 158 159 objects.push( object ); 160 161 // 162 163 var object = new THREE.Object3D(); 164 object.position.x = ( table[ i + 1 ] * 800 ) - 600; 165 object.position.y = - ( table[ i + 2 ] * 700 ) + 400; 166 167 targets.table.push( object ); 168 169 } 170 171 // sphere 172 173 var vector = new THREE.Vector3(); 174 175 for ( var i = 0, l = objects.length; i < l; i ++ ) { 176 177 var phi = Math.acos( -1 + ( 2 * i ) / l ); 178 var theta = Math.sqrt( l * Math.PI ) * phi; 179 180 var object = new THREE.Object3D(); 181 182 object.position.x = 800 * Math.cos( theta ) * Math.sin( phi ); 183 object.position.y = 800 * Math.sin( theta ) * Math.sin( phi ); 184 object.position.z = 800 * Math.cos( phi ); 185 186 vector.copy( object.position ).multiplyScalar( 2 ); 187 188 object.lookAt( vector ); 189 190 targets.sphere.push( object ); 191 192 } 193 194 // helix 195 196 var vector = new THREE.Vector3(); 197 198 for ( var i = 0, l = objects.length; i < l; i ++ ) { 199 200 var phi = i * 0.5 * Math.PI; 201 202 var object = new THREE.Object3D(); 203 204 object.position.x = 1000 * Math.sin( phi ); 205 object.position.y = - ( i * 4 ) + 50; 206 object.position.z = 1000 * Math.cos( phi ); 207 208 vector.x = object.position.x * 2; 209 vector.y = object.position.y; 210 vector.z = object.position.z * 2; 211 212 object.lookAt( vector ); 213 214 targets.helix.push( object ); 215 216 } 217 218 // grid 219 220 for ( var i = 0; i < objects.length; i ++ ) { 221 222 var object = new THREE.Object3D(); 223 224 object.position.x = ( ( i % 5 ) * 400 ) - 800; 225 object.position.y = ( - ( Math.floor( i / 5 ) % 5 ) * 400 ) + 800; 226 object.position.z = ( Math.floor( i / 25 ) ) * 1000 - 2000; 227 228 targets.grid.push( object ); 229 230 } 231 232 // 233 234 renderer = new THREE.CSS3DRenderer(); 235 renderer.setSize( window.innerWidth, window.innerHeight ); 236 renderer.domElement.style.position = 'absolute'; 237 document.getElementById( 'container' ).appendChild( renderer.domElement ); 238 239 // 240 241 controls = new THREE.TrackballControls( camera, renderer.domElement ); 242 controls.rotateSpeed = 0.5; 243 controls.minDistance = 500; 244 controls.maxDistance = 2000; 245 controls.addEventListener( 'change', render ); 246 247 var button = document.getElementById( 'table' ); 248 button.addEventListener( 'click', function ( event ) { 249 250 transform( targets.table, 2000 ); 251 252 }, false ); 253 254 var button = document.getElementById( 'sphere' ); 255 button.addEventListener( 'click', function ( event ) { 256 257 transform( targets.sphere, 2000 ); 258 259 }, false ); 260 261 var button = document.getElementById( 'helix' ); 262 button.addEventListener( 'click', function ( event ) { 263 264 transform( targets.helix, 2000 ); 265 266 }, false ); 267 268 var button = document.getElementById( 'grid' ); 269 button.addEventListener( 'click', function ( event ) { 270 271 transform( targets.grid, 2000 ); 272 273 }, false ); 274 275 transform( targets.table, 5000 ); 276 277 // 278 279 window.addEventListener( 'resize', onWindowResize, false ); 280 281 } 282 283 function transform( targets, duration ) { 284 285 TWEEN.removeAll(); 286 287 for ( var i = 0; i < objects.length; i ++ ) { 288 289 var object = objects[ i ]; 290 var target = targets[ i ]; 291 292 new TWEEN.Tween( object.position ) 293 .to( { x: target.position.x, y: target.position.y, z: target.position.z }, Math.random() * duration + duration ) 294 .easing( TWEEN.Easing.Exponential.InOut ) 295 .start(); 296 297 new TWEEN.Tween( object.rotation ) 298 .to( { x: target.rotation.x, y: target.rotation.y, z: target.rotation.z }, Math.random() * duration + duration ) 299 .easing( TWEEN.Easing.Exponential.InOut ) 300 .start(); 301 302 } 303 304 new TWEEN.Tween( this ) 305 .to( {}, duration * 2 ) 306 .onUpdate( render ) 307 .start(); 308 309 } 310 311 function onWindowResize() { 312 313 camera.aspect = window.innerWidth / window.innerHeight; 314 camera.updateProjectionMatrix(); 315 316 renderer.setSize( window.innerWidth, window.innerHeight ); 317 318 render(); 319 320 } 321 322 function animate() { 323 324 requestAnimationFrame( animate ); 325 326 TWEEN.update(); 327 328 controls.update(); 329 330 } 331 332 function render() { 333 334 renderer.render( scene, camera ); 335 336 } 337 338 </script> 339 <div style="display:none"> 340 <video id="v2" autobuffer="false" data-setup="{}"> 341 <source src="http://tools.kanoha.org/ccltestingvideos/otsukimi_recital.mp4" type="video/mp4"> 342 <source src="http://tools.kanoha.org/ccltestingvideos/otsukimi_recital.webm" type="video/webm"> 343 </video> 344 <video id="v1" autobuffer="false" data-setup="{}"> 345 <source src="http://content.bitsontherun.com/videos/bkaovAYt-52qL9xLP.mp4" type="video/mp4"> 346 <source src="http://content.bitsontherun.com/videos/bkaovAYt-27m5HpIu.webm" type="video/webm"> 347 </video> 348 <video id="v3" autobuffer="false" data-setup="{}"> 349 <source src="http://media.w3.org/2010/05/sintel/trailer.mp4" type="video/mp4"> 350 </video> 351 <video id="v4" autobuffer="false" data-setup="{}"> 352 <source src="http://tools.kanoha.org/experimental/demo.mp4" type="video/mp4"> 353 </video> 354 </div> 355 </body> 356 </html>