本文基于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容器的粒子特效封装的更多相关文章

  1. 基于原生JS实现的Bean容器和AOP编程

    Bean是什么 我们知道Bean是Spring最基础的核心构件,大多数逻辑代码都通过Bean进行管理.NestJS基于TypeScript和依赖注入也实现了类似于Spring Bean的机制:服务提供 ...

  2. 基于slideout.js实现的移动端侧边栏滑动特效

    HTML5现在本领太大了,PC端已经无法满足它的胃口了,它将强势攻入移动端,所以移动端中各种特效也得基于HTML5实现,看看我们将要介绍的slideout.js,能帮我们实现怎么样的侧边栏滑动特效呢~ ...

  3. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

  4. 基于Three.js的360X180度全景图预览插件

    基于Three.js的360X180度全景图预览插件 时间 2015-08-12 10:01:10  HTML5中国 原文  http://www.html5cn.org/article-8621-1 ...

  5. 基于Three.js的360度全景--photo-sphere-viewer--简介

    这个是基于three.js的全景插件  photo-sphere-viewer.js  ---------------------------------------- 1.能添加热点: 2.能调用陀 ...

  6. 基于vue.js的简单用户管理

    功能描述:添加.修改.搜索过滤 效果图: <!DOCTYPE html> <html lang="en"> <head> <title&g ...

  7. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...

  8. 基于 Vue.js 2.0 酷炫自适应背景视频登录页面的设计『转』

    本文讲述如何实现拥有酷炫背景视频的登录页面,浏览器窗口随意拉伸,背景视频及前景登录组件均能完美适配,背景视频可始终铺满窗口,前景组件始终居中,视频的内容始终得到最大限度的保留,可以得到最好的视觉效果. ...

  9. 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]

    基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1] 原文:基于Vue JS, Webpack 以及Material Design的渐进式web应 ...

随机推荐

  1. (转)JSONObject的toBean 和 fromObject

    public static void main(String[] args) { Map map=new HashMap();map.put("我","妹"); ...

  2. nginx autoindex 配置目录浏览功能

    Nginx打开目录浏览功能 yum install httpd-tools -y cd /usr/local/openrestry/nginx/conf/ htpasswd -c passwd adm ...

  3. C#中的switch

    switch 表达式支持的类型为 sbyte.byte.short.ushort.int.uint.long.ulong.char.string 或枚举类型,或者可以隐试转换到这些类型的自定义对象或其 ...

  4. SpringMVC:ssm整合练习一

    西部开源-秦疆老师:MyBatis,Spring,SpringMVC 整合练习一 , 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! ss ...

  5. ssm框架整合,配置文件中的配置内容

    转自:https://www.cnblogs.com/dong-dong-1/p/8724127.html 使用idea工具开发,用maven进行管理. 最近在写毕业设计,因为对ssm框架一直半解,常 ...

  6. 论STA | 工艺、工具、分析的本与末

    人类从漫长的蒙昧中觉醒之后,不再依靠着奇装异服的巫师通灵来指导生活,巫师进化成了科学家,他们试图对周遭的一切进行概括.分类.抽象,于是有了化学.物理.数学等基科.比如一粒沙,它的化学组成是什么,物理特 ...

  7. 使用Docker搭建Spark集群(用于实现网站流量实时分析模块)

    上一篇使用Docker搭建了Hadoop的完全分布式:使用Docker搭建Hadoop集群(伪分布式与完全分布式),本次记录搭建spark集群,使用两者同时来实现之前一直未完成的项目:网站日志流量分析 ...

  8. 启动MySQL5.7时报错:initialize specified but the data directory has files in it. Aborting.

    启动MySQL5.7时报错:initialize specified but the data directory has files in it. Aborting 解决方法: vim /etc/m ...

  9. 我来给你讲清楚Pythony广播

    初学python广播搞的人头大,今天老师上课讲了一下,茅塞顿开,zt老师nb 首先说一下后向纬度(这个后向纬度书里边称作低维),举例:(3,4,5)后向纬度是:3*4*5或4*5或5 向量广播的条件有 ...

  10. VBS微信轰炸

    打开windows命令界面输入notepad将此vbs脚本复制粘贴到记事本,保存并设置后缀名为.vbs,进入微信或者QQ在聊天界面复制好要发送的文字,最后双击运行vbs脚本并把鼠标移入聊天框,最后按发 ...