基于three.js實(shí)現(xiàn)簡易照片墻效果
學(xué)習(xí)three.js的過程中,寫的一個簡易照片墻,可以使用鼠標(biāo)滾輪上下瀏覽,采用的是移動相機(jī)的方式。
代碼貼出來,供學(xué)習(xí)這一塊的朋友們參考和指導(dǎo):
?<!DOCTYPE HTML> <HTML> <HEAD> ? ? <META charset="utf-8"> ? ? <META name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> ? ? <TITLE></TITLE> ? ? <STYLE> ? ? ? ? html, body { ? ? ? ? ? ? height: 100%; ? ? ? ? } ? ? ? ? ? body { ? ? ? ? ? ? background-color: #454545; ? ? ? ? ? ? margin: 0; ? ? ? ? ? ? overflow: hidden; ? ? ? ? ? ? background-size:cover; ? ? ? ? } ? ? ? ? ? .element { ? ? ? ? ? ? width: 240px; ? ? ? ? ? ? height: 320px; ? ? ? ? } ? ? ? ? ? .element img { ? ? ? ? ? ? position: absolute; ? ? ? ? ? ? border:none; ? ? ? ? } ? ? ? </STYLE> ? ? </HEAD> <BODY> ? <script src="js/jquery-3.1.1.min.js"></script> ? <script src="js/jquery.mousewheel.min.js"></script> ? <SCRIPT src="js/three.min.js"></SCRIPT> ? <SCRIPT src="js/CSS3DRenderer.js"></SCRIPT> ? <DIV id="container"></DIV> ? <DIV id="menu"> ? ? ? <SCRIPT> ? ? ? ? var table = []; ? ? ? ? ? var camera, scene, renderer; ? ? ? ? ? createImages(); ? ? ? ? init(); ? ? ? ? animate(); ? ? ? ? ? function init() { ? ? ? ? ? ? camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 ); ? ? ? ? ? ? camera.position.x = 0; ? ? ? ? ? ? camera.position.y = 0; ? ? ? ? ? ? camera.position.z = 3000; ? ? ? ? ? ? camera.lookAt({ ? ? ? ? ? ? ? ? x : 0, ? ? ? ? ? ? ? ? y : 0, ? ? ? ? ? ? ? ? z : 0 ? ? ? ? ? ? }); ? ? ? ? ? ? ? scene = new THREE.Scene(); ? ? ? ? ? ? ? for ( var i = 0; i < table.length ; i ++ ) { ? ? ? ? ? ? ? ? var element = document.createElement( 'div' ); ? ? ? ? ? ? ? ? element.className = 'element'; ? ? ? ? ? ? ? ? element.id = 'element'; ? ? ? ? ? ? ? ? ? var photo = document.createElement('img'); ? ? ? ? ? ? ? ? photo.className = 'photo'; ? ? ? ? ? ? ? ? photo.id = table[ i ][0]; ? ? ? ? ? ? ? ? photo.src='images/'+table[ i ][0]+'?t='+Math.floor((Math.random()*100)+1); ? ? ? ? ? ? ? ? ? element.appendChild( photo ); ? ? ? ? ? ? ? ? ? var objectCSS = new THREE.CSS3DObject( element ); ? ? ? ? ? ? ? ? objectCSS.position.x = ( table[ i ] [1] * 250 ) - 1750; ? ? ? ? ? ? ? ? objectCSS.position.y = - ( table[ i ] [2]* 330 ) + 1200; ? ? ? ? ? ? ? ? objectCSS.position.z = 0; ? ? ? ? ? ? ? ? scene.add( objectCSS ); ? ? ? ? ? ? } ? ? ? ? ? ? ? renderer = new THREE.CSS3DRenderer(); ? ? ? ? ? ? renderer.setSize( window.innerWidth, window.innerHeight ); ? ? ? ? ? ? renderer.domElement.style.position = 'absolute'; ? ? ? ? ? ? document.getElementById( 'container' ).appendChild( renderer.domElement ); ? ? ? ? ? ? ? window.addEventListener( 'resize', onWindowResize, false ); ? ? ? ? } ? ? ? ? ? function onWindowResize() { ? ? ? ? ? ? ? camera.aspect = window.innerWidth / window.innerHeight; ? ? ? ? ? ? camera.updateProjectionMatrix(); ? ? ? ? ? ? ? renderer.setSize( window.innerWidth, window.innerHeight ); ? ? ? ? ? } ? ? ? ? ? function animate() { ? ? ? ? ? ? ? renderer.render( scene, camera ); ? ? ? ? ? ? requestAnimationFrame( animate ); ? ? ? ? ? } ? ? ? ? ? $(window).mousewheel(function(event) { ? ? ? ? ? ? camera.position.y -= event.deltaY * event.deltaFactor; ? ? ? ? ? ? camera.position.z = 3000; ? ? ? ? ? ? ? var target = new THREE.Vector3(); ? ? ? ? ? ? var _eye = new THREE.Vector3(); ? ? ? ? ? ? ? _eye.subVectors( camera.position, target ); ? ? ? ? ? ? camera.position.addVectors( target, _eye ); ? ? ? ? ? ? camera.lookAt( _eye ); ? ? ? ? ? }); ? ? ? ? ? function createImages (){ ? ? ? ? ? ? var files = [ ? ? ? ? ? ? ? ? {"name":"0.jpg"}, ? ? ? ? ? ? ? ? {"name":"1.jpg"}, ? ? ? ? ? ? ? ? {"name":"2.jpg"} ? ? ? ? ? ? ]; ? ? ? ? ? ? var row =1; ? ? ? ? ? ? var col = 1; ? ? ? ? ? ? for(var i = 0; i < files.length;i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? var file = []; ? ? ? ? ? ? ? ? file[0] = files[i]['name']; ? ? ? ? ? ? ? ? file[1] = col++; ? ? ? ? ? ? ? ? file[2] = row; ? ? ? ? ? ? ? ? table[i] = file; ? ? ? ? ? ? ? ? if(col > 13) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? col = 1; ? ? ? ? ? ? ? ? ? ? row++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? </SCRIPT> </DIV> </BODY> </HTML>
效果圖如下:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js將類數(shù)組對象轉(zhuǎn)換成數(shù)組對象
javascript與dom有許多瑕疵,如著名的類數(shù)組對象Arguments,其他諸如HTMLCollection,NodeList如果它們都是數(shù)組的子類,那多省時啊。2010-05-05javascript輕松實(shí)現(xiàn)當(dāng)鼠標(biāo)移開時已彈出子菜單自動消失
本文為大家詳細(xì)介紹下使用javascript實(shí)現(xiàn)當(dāng)鼠標(biāo)移開時已彈出子菜單自動消失,具體如下,感興趣的朋友不要錯過2013-12-12JavaScript實(shí)現(xiàn)移動端彈窗后禁止?jié)L動
這篇文章主要介紹了JavaScript實(shí)現(xiàn)移動端彈窗后禁止?jié)L動,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05Avalon中文長字符截取、關(guān)鍵字符隱藏、自定義過濾器
avalon是一個簡單易用迷你的MVVM框架。通過本文給大家介紹Avalon中文長字符截取、關(guān)鍵字符隱藏、自定義過濾器的相關(guān)資料,需要的朋友一起學(xué)習(xí)吧2016-05-05javascript 函數(shù)調(diào)用規(guī)則
構(gòu)造器函數(shù)以大寫字母開頭是一個好的習(xí)慣,這可以作為一個提醒,讓你在調(diào)用的時候不要忘記前面的new運(yùn)算符.2009-08-08