HTML+CSS+JavaScript网页特效源代码(复制代码保存即可使用)

文章描述了一个使用JavaScript和Three.js库创建的3D场景,涉及动态渲染、动画效果(如滑动、颜色变化和脉冲)以及各种特效(机械蜂巢、万花筒和电流彩线),展示了如何通过编程控制立方体在网格中的移动和着色。
摘要由CSDN通过智能技术生成

box.posZ -= allRowsDepth;

}

// return;

// if (isMouseDown) return;

if (!box.isWarping && Math.random() > 0.999) {

var dir = Math.floor(Math.random() * 5), xn = x, zn = z, yn = y, yi = 0, xo = 0, zo = 0;

switch (dir) {

case 0 : xn++; xo = 1; break;

case 1 : xn–; xo = -1; break;

case 2 : zn++; zo = 1; break;

case 3 : zn–; zo = -1; break;

case 4 :

yn = (y === planeTop) ? planeBottom : planeTop;

yi = (y === planeTop) ? -1 : 1;

break;

}

if (boxes[yn][zn] && boxes[yn][zn][xn] === emptySlot) {

boxes[y][z][x] = emptySlot;

box.isWarping = true;

boxes[yn][zn][xn] = box;

// con.log( box.offset.x, box.offset.z);

if (dir === 4) { // slide vertically

TweenMax.to(box.position, 0.5, {

y: yi * planeOffset

});

} else { // slide horizontally

TweenMax.to(box.offset, 0.5, {

x: box.offset.x + xo * (size.width + gap),

z: box.offset.z + zo * (size.depth + gap),

});

}

TweenMax.to(box.offset, 0.6, {

onComplete: function() {

box.isWarping = false;

}

});

}

}

}

}

function render(time) {

speed -= (speed - (isMouseDown ? speedFast : speedNormal)) * 0.05;

var box;

for (var b = 0, bl = boxes1d.length; b < bl; b++) {

box = boxes1d[b];

box.posZ += speed;

// normalized z distance from camera

var distanceZ = 1 - ((allRowsDepth - box.posZ) / (allRowsDepth) - 1);

box.material.uniforms.distanceZ.value = distanceZ;

// normalized x distance from camera (centre)

var distanceX = 1 - (Math.abs(box.position.x)) / (allColsWidth / 3);

box.material.uniforms.distanceX.value = distanceX;

var colour = isMouseDown ? box.colours.fast : box.colours.slow;

box.material.uniforms.r.value -= (box.material.uniforms.r.value - colour.r) * 0.1;

box.material.uniforms.g.value -= (box.material.uniforms.g.value - colour.g) * 0.1;

box.material.uniforms.b.value -= (box.material.uniforms.b.value - colour.b) * 0.1;

// normalized speed

var currentSpeed = (speed - speedNormal) / (speedFast - speedNormal)

box.material.uniforms.speed.value = currentSpeed;

// pulses more with more speed… of course!

if (Math.random() > (0.99995 - currentSpeed * 0.005)) {

box.material.uniforms.pulse.value = 1;

}

box.material.uniforms.pulse.value -= box.material.uniforms.pulse.value * 0.1 / (currentSpeed + 1);

// if (b ==13) con.log(box.material.uniforms.speed.value);

}

for (var j = 0, jl = rows; j < jl; j++) { // iterate through rows: z

for (var i = 0, il = cols; i < il; i++) { // iterate throw cols: x

move(i, planeBottom, j);

move(i, planeTop, j);

};

};

camPos.x -= (camPos.x - mouse.x * 400) * 0.02;

camPos.y -= (camPos.y - mouse.y * 150) * 0.05;

camPos.z = -100;

camera.position.set(camPos.x, camPos.y, camPos.z);

// camera.lookAt( scene.position );

// camera.rotation.z = time * 0.0001;

camera.rotation.y = camPos.x / -1000;

camera.rotation.x = camPos.y / 1000;

// camera.rotation.z = camPos.x / -2000;

camera.rotation.z = (camPos.x - mouse.x * 400) / 2000;

renderer.render( scene, camera );

// if (time < 800)

requestAnimationFrame( render );

}

var vertexShader = [

“varying vec2 vUv;”,

“void main()”,

“{”,

" vUv = uv;",

" vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",

" gl_Position = projectionMatrix * mvPosition;",

“}”].join(“”);

var fragmentShader = [

“uniform float r;”,

“uniform float g;”,

“uniform float b;”,

“uniform float distanceZ;”,

“uniform float distanceX;”,

“uniform float pulse;”,

“uniform float speed;”,

“varying vec2 vUv;”,

// “float checkerRows = 8.0;”,

// “float checkerCols = 16.0;”,

“void main( void ) {”,

" vec2 position = abs(-1.0 + 2.0 * vUv);",

" float edging = abs((pow(position.y, 5.0) + pow(position.x, 5.0)) / 2.0);",

" float perc = (0.2 * pow(speed + 1.0, 2.0) + edging * 0.8) * distanceZ * distanceX;",

// " float perc = distanceX * distanceZ;",

// " vec2 checkPosition = vUv;",

// " float checkerX = ceil(mod(checkPosition.x, 1.0 / checkerCols) - 1.0 / checkerCols / 2.0);",

// " float checkerY = ceil(mod(checkPosition.y, 1.0 / checkerRows) - 1.0 / checkerRows / 2.0);",

// " float checker = ceil(checkerX * checkerY);",

// " float r = checker;",

// " float g = checker;",

// " float b = checker;",

// " float perc = 1.0;",

" float red = r * perc + pulse;",

" float green = g * perc + pulse;",

" float blue = b * perc + pulse;",

" gl_FragColor = vec4(red, green, blue, 1.0);",

“}”].join(“”);

//console.log(THREE, TweenMax, planeTop, planeBottom);

init();

特效二

机械蜂巢演示

在这里插入图片描述

蓝盒子

特效三

万花筒演示

在这里插入图片描述

蓝盒子

特效四

电流

在这里插入图片描述

蓝盒子

特效五

彩线

在这里插入图片描述

蓝盒子

特效六

在这里插入图片描述

蓝盒子

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值