基于three.js实现特定Div容器的粒子特效封装
本文基于three.js实现特定容器的粒子特效效果,支持用户传入特定的dom对象以及粒子颜色。
效果图
移入库
<script src="jquery-1.11.3.min.js" type="text/javascript"> </script>
<script src="three.min.js" type="text/javascript"></script>
<script src="bodong.js" type="text/javascript"></script>
Html页面指定容器
<!-- 波动动画 -->
<div id="particles" style="width:100%; overflow:hidden; height:200px;background:#383232;"></div>
创建波动示例并完成容器绑定
<srcipt>
$(function(){
//构造波动对象,指定dom元素,指定粒子颜色字符串
var BodongObj=new Bodong($('#particles'),'#c0cbff');
BodongObj.init();
BodongObj.animate();
}) </script>
第三方库下载链接
http://v.bootstrapmb.com/2019/4/u0d54217/dom01/three.min.js
核心代码(bodong.js)
function Bodong(domElement,color) {
var SEPARATION = 100,
AMOUNTX = 50,
AMOUNTY = 50;
var container;
var camera, scene, renderer;
var particles, particle, count = 0;
var mouseX = -660,
mouseY = -210;
var windowHalfX = domElement.innerWidth() / 2;
var windowHalfY = domElement.innerHeight() / 1; this.init = function() {
container = document.createElement("div");
container.id = "banner-canvas";
document.getElementById("particles").appendChild(container);
camera = new THREE.PerspectiveCamera(75, domElement.innerWidth() / domElement.innerHeight(), 1, 10000);
camera.position.z = 1000;
scene = new THREE.Scene();
particles = new Array();
var e = Math.PI * 2;
var d = new THREE.ParticleCanvasMaterial({
color: color||"#46c37b",
program: function(f) {
f.beginPath();
f.arc(0, 0, 1, 0, e, true);
f.fill()
}
});
var a = 0;
for (var b = 0; b < AMOUNTX; b++) {
for (var c = 0; c < AMOUNTY; c++) {
particle = particles[a++] = new THREE.Particle(d);
particle.position.x = b * SEPARATION - ((AMOUNTX * SEPARATION) / 2);
particle.position.z = c * SEPARATION - ((AMOUNTY * SEPARATION) / 2);
scene.add(particle)
}
}
renderer = new THREE.CanvasRenderer();
renderer.setSize(domElement.innerWidth(), domElement.innerHeight());
container.appendChild(renderer.domElement);
document.addEventListener("mousemove", this.onDocumentMouseMove, false);//整个页面监听鼠标移动事件
domElement.on("resize", this.onWindowResize, false);
} this.onWindowResize = function() {
windowHalfX = domElement.innerWidth() / 2;
windowHalfY = domElement.innerHeight() / 2;
camera.aspect = domElement.innerWidth() / domElement.innerHeight();
camera.updateProjectionMatrix();
renderer.setSize(domElement.innerWidth(), domElement.innerHeight())
} this.onDocumentMouseMove = function(a) {
mouseX = a.clientX - windowHalfX;//水平移动距离
mouseY = a.clientY - windowHalfY;//竖直移动距离
mouseY=mouseY>0?-mouseY:mouseY;//防止视角上扬
} this.onDocumentTouchStart = function(a) {
if (a.touches.length === 1) {
a.preventDefault();
mouseX = a.touches[0].pageX - windowHalfX;
mouseY = a.touches[0].pageY - windowHalfY
}
} this.onDocumentTouchMove = function(a) {
if (a.touches.length === 1) {
a.preventDefault();
mouseX = a.touches[0].pageX - windowHalfX;
mouseY = a.touches[0].pageY - windowHalfY
}
} this.animate = function() {
requestAnimationFrame(this.animate.bind(this));//绑定this
this.render()
} this.render = function() {
camera.position.x += (mouseX - camera.position.x) * 0.05;
camera.position.y += (-mouseY - camera.position.y) * 0.05;
camera.lookAt(scene.position);
var a = 0;
for (var b = 0; b < AMOUNTX; b++) {
for (var c = 0; c < AMOUNTY; c++) {
particle = particles[a++];
particle.position.y = (Math.sin((b + count) * 0.3) * 50) + (Math.sin((c + count) * 0.5) * 50);
particle.scale.x = particle.scale.y = (Math.sin((b + count) * 0.3) + 1) * 2 + (Math.sin((c + count) * 0.5) + 1) * 2
}
}
renderer.render(scene, camera);
count += 0.08
}; } /*--------------------测试数据------------------------*/ //var BodongObj=new Bodong($('#particles'),'#c0cbff');
//BodongObj.init();
//BodongObj.animate();
bodong.js
在线Dome效果链接(以整个网页为容器,本文在此基础上进行封装)
http://v.bootstrapmb.com/2019/4/u0d54217/
基于three.js实现特定Div容器的粒子特效封装的更多相关文章
- 基于原生JS实现的Bean容器和AOP编程
Bean是什么 我们知道Bean是Spring最基础的核心构件,大多数逻辑代码都通过Bean进行管理.NestJS基于TypeScript和依赖注入也实现了类似于Spring Bean的机制:服务提供 ...
- 基于slideout.js实现的移动端侧边栏滑动特效
HTML5现在本领太大了,PC端已经无法满足它的胃口了,它将强势攻入移动端,所以移动端中各种特效也得基于HTML5实现,看看我们将要介绍的slideout.js,能帮我们实现怎么样的侧边栏滑动特效呢~ ...
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- 基于Three.js的360X180度全景图预览插件
基于Three.js的360X180度全景图预览插件 时间 2015-08-12 10:01:10 HTML5中国 原文 http://www.html5cn.org/article-8621-1 ...
- 基于Three.js的360度全景--photo-sphere-viewer--简介
这个是基于three.js的全景插件 photo-sphere-viewer.js ---------------------------------------- 1.能添加热点: 2.能调用陀 ...
- 基于vue.js的简单用户管理
功能描述:添加.修改.搜索过滤 效果图: <!DOCTYPE html> <html lang="en"> <head> <title&g ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...
- 基于 Vue.js 2.0 酷炫自适应背景视频登录页面的设计『转』
本文讲述如何实现拥有酷炫背景视频的登录页面,浏览器窗口随意拉伸,背景视频及前景登录组件均能完美适配,背景视频可始终铺满窗口,前景组件始终居中,视频的内容始终得到最大限度的保留,可以得到最好的视觉效果. ...
- 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]
基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1] 原文:基于Vue JS, Webpack 以及Material Design的渐进式web应 ...
随机推荐
- FFmpeg—— Bitstream Filters 作用
原文链接: https://stackoverflow.com/questions/32028437/what-are-bitstream-filters-in-ffmpeg Let me expla ...
- promise学习,多看几次。含node,ES6知识
一.引出promise解决回调地狱 需求:你要封装一个方法,我给你一个要读取文件的路径,你这个方法能帮我读取文件,并把内容返回给我 目录图片 三个txt里面的内容分别是111,222,333 1.模块 ...
- 网络常识---tracert
当打不开一个网页,可以是用如下命令查看请求的数据走到哪里了 在命令行中输入“tracert ”并在后面加入一个IP地址,可以查询从本机到该IP地址所在的电脑要经过的路由器及其IP地址
- bugku 域名解析题 50
什么是域名解析???? 首先我们在Windows上找到文件“C:\Windows\System32\drivers\etc\hosts” 然后找到host 双击用记事本打开然后填写上黄色区域上的东西 ...
- Euler Sums系列(六)
\[\Large\displaystyle \sum_{n=1}^{\infty}\frac{H_{2n}}{n(6n+1)}\] \(\Large\mathbf{Solution:}\) Let \ ...
- yii2自定义报错页面
在Yii2版本的advanced高级模板环境中:设置404自定义页面的方法 1.config/main.php文件 'errorHandler' => [ 'errorAction' => ...
- Go_runtime包
package main import ( "fmt" "runtime" "time" ) //写在init函数里,main函数运行之前就 ...
- 【C语言】实参求值的顺序
#include<stdio.h> void fun(int x,int y) { printf("x=%d,y=%d",x,y); } int main() { in ...
- [原]eclipse中spring配置文件的自动提示和命名空间的添加
在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...
- bootstrap fileinput上传文件
参考博客:https://blog.csdn.net/linhaiyun_ytdx/article/details/76215974 https://www.cnblogs.com/parker-y ...