我想创建一个three.js模型的灯箱/弹出窗口。我的HTML画布正在出现,但我无法在画布中看到three.js模型,我不明白为什么。感谢
http://jsfiddle.net/cool_brian/e72duxwc/2/
我的three.js功能:
function cube() {
var myCanvas = document.getElementById("myCanvas");
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(myCanvas.offsetWidth, myCanvas.offsetHeight);
renderer.setClearColorHex(0xffffff, 1);
var geometry = new THREE.CubeGeometry(1, 1, 1);
var material = new THREE.MeshBasicMaterial({
color: 0x00ff00
});
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 5;
var render = function () {
requestAnimationFrame(render);
cube.rotation.x += 0.02;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
};
render();
};
JQuery Light box:
jQuery(document).ready(function ($) {
//alert("the doc is ready");
$('.lightbox_trigger').click(function (e) {
//prevent default action (hyperlink)
e.preventDefault();
var lightbox =
'<div id="lightbox">' +
'<p>Click to close</p>' +
'<div id="content">' +
'<canvas id="myCanvas" width="800px" height="800px"style="border:10px solid #000000;">' +
'</canvas>' +
'</div>' +
'</div>';
//insert lightbox HTML into page
$('body').append(lightbox);
});
//Click anywhere on the page to get rid of lightbox window
$('#lightbox').live('click', function () {
$('#lightbox').hide();
});
HTML:
<p>lightbox demo
<ul>
<li> <a class="lightbox_trigger" onClick="alert(link 1)"> alert </a>
</li>
<li> <a class="lightbox_trigger" onClick="cube();"> three.js example </a>
</li>
</ul>
</p>
答案 0 :(得分:0)
您正在使用“onClick”以及使用jquery添加点击事件
1。我删除了onClick
。
您通往外部three.js的路径是错误的,您还告诉jsfiddle包含它 2。我删除了包含(框架部分)three.js并将正确的github路径添加到最新的three.js(外部资源部分)。
3。我为最新的three.js更改了几个类和函数调用。
4。我改变了将画布添加到页面的方式。
5。我在灯箱关闭时添加了cancelAnimationFrame
。
现在应该显示您的期望
BUT。
它只会在每次单击文本时创建新灯箱时关闭第一个“灯箱”,但仅在关闭时隐藏它。这导致DOM中有多个灯箱div(但只有1个可见)
为了纠正这个问题,我建议您在页面加载时创建灯箱div,隐藏它,然后只需添加一个新场景并在需要时显示灯箱,并删除场景并在适当时隐藏灯箱。
这是JSFIDDLE:http://jsfiddle.net/e72duxwc/4/