学习three.js的过程中,写的一个简易照片墙,可以使用鼠标滚轮上下浏览,采用的是移动相机的方式。

代码贴出来,供学习这一块的朋友们参考和指导:

 <!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>

效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。

基于three.js实现简易照片墙效果的更多相关文章

  1. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 基于jQuery实现照片墙自动播放特效

    这篇文章主要为大家详细介绍了基于jQuery实现照片墙自动播放特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Three.js+React制作3D梦中海岛效果

    深居内陆的人们,大概每个人都有过大海之梦吧。本文使用React+Three.js技术栈,实现3D海洋和岛屿,感兴趣的小伙伴可以跟随小编一起学习一下

  4. javascript Three.js创建文字初体验

    这篇文章主要为大家介绍了Three.js创建文字初体验,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  5. Vue集成three.js并加载glb、gltf、FBX、json模型的场景分析

    这篇文章主要介绍了Vue集成three.js,并加载glb、gltf、FBX、json模型,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Three.js+React实现带火焰效果的艾尔登法环

    《艾尔登法环》是最近比较火的一款游戏,观察可以发现它的 Logo 是由几个圆弧和线段构成。本文使用 React + Three.js 技术栈,实现具有火焰效果艾尔登法环 Logo,感兴趣的可以了解一下

  7. 利用Three.js制作一个新闻联播开头动画

    这篇文章主要为大家介绍了如何利用Three.js制作一个新闻联播开头动画,文中的实现步骤讲解详细,对我们学习有一定帮助,需要的可以参考一下

  8. Three.js实现脸书元宇宙3D动态Logo效果

    本文主要讲述通过 Three.js + Blender 技术栈,实现 Meta 公司炫酷的 3D 动态 Logo,内容包括基础模型圆环、环面扭结、管道及模型生成、模型加载、添加动画、添加点击事件、更换材质等

  9. Three.Js实现看房自由小项目

    目前随着元宇宙概念的爆火,THREE技术已经深入到了物联网、VR、游戏、数据可视化等多个平台,今天我们主要基于THREE实现一个三维的VR看房小项目,感兴趣的朋友跟随小编一起看看吧

  10. 使用three.js实现炫酷的酸性风格3D页面效果

    本文内容主要介绍,通过使用React+three.js技术栈,加载3D模型、添加3D文字、增加动画、点击交互等,配合样式设计,实现充满设计感的酸性风格页面

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部