項目要求實現(xiàn)一種3d效果,網(wǎng)上找到了demo,但是是估計是 es5 實現(xiàn)的,在本地可以看到效果,但是現(xiàn)在需要放到 vue.js 里面去,整了一下午,各種錯誤。
我把three.js直接拷貝到項目里面,然后按如下方式引入:
或者 npm install three --save
都試過了,全部報錯,報錯方式如下:
到底該如何把如下的 js 代碼 “翻譯” 到 vue 文件里面呢????????
原版js代碼如下(精簡版):
<!DOCTYPE html>
<html>
<head>
<title>Points</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
body {
background-color: #000000;
margin: 0px;
overflow: hidden;
}
</style>
</head>
<body>
<p style="position: absolute;left: 0;right: 0;bottom: 0;text-align: center;">
<button type="button" id="click_btn">星云控制</button>
</p>
<script src="three.min.js"></script>
<script src="tween.min.js"></script>
<script>
var container;
var camera, scene, renderer;
var mouseX = 0, mouseY = 0;
var mesh6;
var particles2, geometry2, material2, i2, sprite;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
init();
animate();
function init() {
container = document.createElement('div');
document.body.appendChild(container);
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 15000);
camera.position.z = 9000;
scene = new THREE.Scene();
var material = new THREE.LineBasicMaterial({
color: 0xffffff,
linewidth: 1000
});
var x = 6000;
var geometry = new THREE.Geometry();
geometry.vertices.push(
new THREE.Vector3(-x, 0, 0),
new THREE.Vector3(0, Math.sqrt(3 * x * x), 0),
new THREE.Vector3(x, 0, 0),
new THREE.Vector3(-x, 0, 0)
);
var loader = new THREE.JSONLoader();
loader.load('Sphere.json', handle_load6);
function handle_load6(geometry, material) {
var colors = [];
for (var i = 0; i < geometry.vertices.length; i++) {
colors[i] = new THREE.Color(0x6870F5);
var hsl = colors[i].getHSL();
colors[i].setHSL(hsl.h + 0.05, Math.random() * 0.4 + 0.5, Math.random() * 0.3 + 0.5);
}
geometry.colors = colors;
var material = new THREE.PointsMaterial({
size: 50,
opacity: 0.5,
map: THREE.ImageUtils.loadTexture('orb.png'),
transparent: true,
blending: THREE.AdditiveBlending,
depthWrite: false,
vertexColors: THREE.VertexColors
});
mesh6 = new THREE.Points(geometry, material);
}
{
geometry2 = new THREE.Geometry();
sprite = new THREE.TextureLoader().load("orb.png");
for (i2 = 0; i2 < 400; i2++) {
var vertex = new THREE.Vector3();
vertex.x = 12000 * Math.random() - 6000;
vertex.y = 12000 * Math.random() - 6000;
vertex.z = 12000 * Math.random() - 6000;
geometry2.vertices.push(vertex);
}
material2 = new THREE.PointsMaterial({
size: 50,
opacity: 0.8,
sizeAttenuation: true,
map: sprite,
depthWrite: false,
transparent: true
});
material2.color.setHSL(1.0, 1, 1);
particles2 = new THREE.Points(geometry2, material2);
scene.add(particles2);
}
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement);
document.addEventListener('mousemove', onDocumentMouseMove, false);
window.addEventListener('resize', onWindowResize, false);
}
function onWindowResize() {
windowHalfX = window.innerWidth / 2;
windowHalfY = window.innerHeight / 2;
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
function onDocumentMouseMove(event) {
mouseX = event.clientX - windowHalfX;
mouseY = 2 * event.clientY - 2 * windowHalfY;
}
var isMeTweening = false;
var meshobj = null;
function clickMeOk() {
if (null == meshobj) {
//解決load立即加載動畫,改為點擊按鈕才加載動畫
meshobj = 'ok';
scene.add(mesh6);//按鈕控制,默認(rèn)未加載,點擊按鈕后才執(zhí)行(這句確保load完成后時候顯示鮮果)
//初始化,未了避免加載就顯示相應(yīng)動畫效果
mesh6.scale.x = 0.0010000000000000009;
mesh6.scale.y = 0.0010000000000000009;
mesh6.scale.z = 0.0010000000000000009;
mesh6.material.opacity = 0;
}
if (isMeTweening) return;
isMeTweening = true;
console.log('qqqq', mesh6.scale);//1 - 0.0010000000000000009
var scale = mesh6.scale.x < 1 ? 1 : 0.0010000000000000009;
console.log('eeee' + scale);//0.001 - 1
new TWEEN.Tween(mesh6.scale).to({ x: scale, y: scale, z: scale }, 2000).easing(TWEEN.Easing.Quartic.InOut).onComplete(function () {
isMeTweening = false;
}).start();
var opacity = mesh6.material.opacity > 0 ? 0 : 0.5;
new TWEEN.Tween(mesh6.material).to({ opacity: opacity }, 1800).easing(TWEEN.Easing.Quartic.InOut).start();
}
window.onload = function () {
document.getElementById('click_btn').addEventListener('click', clickMeOk)
}
function animate() {
requestAnimationFrame(animate);
render();
TWEEN.update();
}
function render() {
camera.position.x += (mouseX - camera.position.x) * 0.08;
camera.position.y += (- mouseY - camera.position.y) * 0.08;
camera.lookAt(scene.position);
particles2.rotation.y += 0.0009;
renderer.render(scene, camera);
}
</script>
</body>
</html>
到底該如何把如上的 js 代碼 “翻譯” 到 vue 文件里面呢????????
如果需要效果源碼的請留言,謝謝大牛
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。