便利贴--12{酷炫背景,小球随鼠标移动,可自由设置小球属性}

16 篇文章 0 订阅
6 篇文章 0 订阅

便利贴--12{酷炫背景,小球随鼠标移动,可自由设置小球属性}

html

之前做的 拿出来分享下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			body{
				padding: 0;
				margin: 0;
			}
			#sets{
				position: fixed;
				bottom: 300px;
				right: 65px;
				display: none;
				display: flex;
				align-items: center;
			}
			.setss{
				position: fixed;
				bottom: 30px;
				right: 30px;
				display: none;
				display: flex;
				align-items: center;
				justify-content: center;
				flex-direction: column;
			}
			#use{
				position: fixed;
				top: 0;
				right: 0;
				background-color: transparent;
				border: transparent;
				width: 50px;
				height: 50px;
			}
			.in1{
				width: 50px;
			}
		</style>
	</head>
	<body>
		<div>
			<canvas id="frist" style="border:1px solid #c3c3c3;margin: 0;"></canvas>
		</div>
		<button id="use"></button>
		<div id="sets">
			<form class="setss" name="in1">
				<span>数量: </span><input class="in1" type="number" />
				<span>尺寸: </span><input class="in1" type="number" />
				<span>透明度-点0-1: </span><input class="in1" type="number" />
				<span>透明度-鼠标线0-1: </sspan><input class="in1" type="number" />
				<span>透明度-点线0-1: </span><input class="in1" type="number" />
			</form>
			<button id="ourb">start</button>
		</div>
		<script>
			var a = document.getElementById('frist'),
				Dwidth,
				Dheight,
				dots = [],
				much = 40,
				op =1,
				opmou = 0.5,
				opline = 0.1,
				pointSize = 10;
			var int = document.getElementsByClassName('in1');
				int[0].value = much;
				int[1].value = pointSize;
				int[2].value = op;
				int[3].value = opmou;
				int[4].value = opline;
			var sizeD = ()=>{
				Dwidth = document.documentElement.clientWidth;
				Dheight = document.documentElement.clientHeight;
			}
			sizeD();
			console.log(Dwidth,Dheight);
			a.width = Dwidth - 8;
			a.height = Dheight - 8;
		function getdos(){
			dots = [];//粒子个数
			        var ws = a.width,
						hs = a.height;
					// var wwp = parseInt(ws / (2 * pointSize + 4)), //每行个数
					// 	hhp = parseInt(hs / (2 * pointSize + 4));// 每列个数
					var wwp = parseInt(Math.sqrt(much)),
						hhp = wwp + 1;
					var whp = hhp * wwp;
					console.log(wwp + '*' + hhp + '=' + whp);
					var wcc = ws / pointSize / wwp,
						hcc = hs / pointSize / hhp;
						console.log(wcc + '*' + hcc );
					var n = 0;
					for(var hi = 0; hi < hhp; hi ++){
						for (var i = 0; i < wwp; i++) {
							// var x = Math.random() * (a.width - 2 * pointSize) + pointSize;
							// var y = Math.random() * (a.height - 2 * pointSize) + pointSize;
							var xa = (Math.random() * 2 - 1)/1;
							var ya = (Math.random() * 2 - 1)/1;
							var x = (pointSize + 2 * wcc) + 2 * (i * (pointSize + 2 * wcc));
							var y = (pointSize + 2 * hcc) + 2 * (hi * (pointSize + 2 * hcc));
							// var xa = 0;
							// var ya = 0;
							n ++;
							if(n > much){
								break;
							}
							dots.splice(n,1,{x, y, xa, ya})
						}
					}
		}
			this.getdos();
					
					
					var bo = document.getElementById('use'),
						sb = document.getElementById('ourb'),
						se = document.getElementById('sets'),
						opens = false;
					bo.onclick = ()=>{
						open = !open;
						if(open){
							se.style.display = 'none';
						}else{
							se.style.display = 'block';
						}
					}
					ourb.onclick = ()=>{
						much = +int[0].value;
						pointSize = +int[1].value;
						if(int[2].value >= 0 && int[2].value <= 1 && int[3].value >= 0 && int[3].value <= 1 && int[4].value >= 0 && int[4].value <= 1){
							op = int[2].value;
							opmou = int[3].value;
							opline = int[4].value;
						}else{
							console.log('透明度设置错误')
						}
						getcolor();
						this.getdos();
					}
					
					
					
					
			window.onresize = ()=>{
				sizeD();
				console.log(Dwidth,Dheight);
				a.width = Dwidth - 8;
				a.height = Dheight - 8;
				
				this.getdos();
			};
			
				var axt = a.getContext('2d');
			var colors = [];//颜色
			
			var getcolor = ()=>{
				// for (var i = 0; i < much; i++) {
				// 	var mu = parseInt(Math.random() * 16777215).toString(16);
				// 	colors.splice(i,1,mu)
				// }
				for (var i = 0; i < much + 3; i++) {
					var mu = parseInt(Math.random() * 256);
					colors.splice(i,1,mu)
				}
				
				
			}
				getcolor();
				
			var warea = {x: -1000, y: -1000, max: 20000};
			a.onmousemove = function(e) {
			  e = e || window.event;
			  warea.x = e.clientX;
			  warea.y = e.clientY;
			};
			document.onmouseout = function(e) {
			  warea.x = -1000;
			  warea.y = -1000;
			};
			document.onclick = (e)=> {
				warea.x = -1000;
				warea.y = -1000;
			};
			
			var active = ()=>{
				axt.clearRect(0,0,a.width,a.height);
				
				for (var n = 0; n < dots.length; n++) {
				var na = dots[n];
				
				
					for(var i = 0; i < dots.length; i ++){
						var ia = dots[i];
						if(ia == na)continue;
						var cx = ia.x - na.x,
							cy = ia.y - na.y;
						na.xa *= ((cx * cx + cy * cy) <= (4 * pointSize * pointSize))? -1: 1;
						na.ya *= ((cx * cx + cy * cy) <= (4 * pointSize * pointSize))? -1: 1;
					}
					
					
					dots[n].xa *= (dots[n].x > a.width - pointSize)? -1: 1;
					dots[n].ya *= (dots[n].y > a.height - pointSize)? -1: 1;
					dots[n].xa *= (dots[n].x < pointSize)? -1: 1;
					dots[n].ya *= (dots[n].y < pointSize)? -1: 1;
					dots[n].x += dots[n].xa;
					dots[n].y += dots[n].ya;
				var c1 = colors[n];
				var c2 = colors[n + 1];
				var c3 = colors[n + 2];
				// axt.fillStyle = '#' + c;
				axt.fillStyle = 'rgba(' + c1 + ',' + c2 + ',' + c3 + ',' + op + ')';
				// axt.fillRect(dots[n].x,dots[n].y,pointSize,pointSize);
				axt.beginPath();
				axt.arc(dots[n].x,dots[n].y,pointSize,0,Math.PI * 2,true);
				axt.closePath();
				axt.fill();
				
				var ndots = [warea].concat(dots);
				
				for (var i = 0; i < ndots.length; i++) {
					var d2 = ndots[i];
					
					if (dots[n] === d2 || d2.x === null || d2.y === null) continue;
					
					var xc = dots[n].x - d2.x;
					var yc = dots[n].y - d2.y;
					
					var dis = xc * xc + yc * yc;
					
					var ratio;
					
					if (dis < d2.max) {
						// 如果是鼠标,则让粒子向鼠标的位置移动
						if (d2 === warea && dis > (d2.max / 2)) {
						// dots[n].x -= xc * 1;
						// dots[n].y -= yc * 1;
						dots[n].x -= xc * 0.01;
						dots[n].y -= yc * 0.01;
						}
						
						ratio = (d2.max - dis) / d2.max;
						
						axt.beginPath();
						    axt.lineWidth = ratio / 2;
							// axt.fillStyle = ;
						    // axt.strokeStyle = 'rgba(0,0,0,' + (ratio + 0.2) + ')';
							axt.strokeStyle = 'rgba(' + c1 + ',' + c2 + ',' + c3 + ',' + opmou + ')';
						    axt.moveTo(dots[n].x, dots[n].y);
						    axt.lineTo(d2.x, d2.y);
						    axt.stroke();
					}
					
					var mx = dots[n].x,
						my = dots[n].y,
						mxa = d2.x,
						mya = d2.y;
					
					var mxc = mxa - mx,
						myc = mya - my;
					var cut = Math.sqrt(+Math.pow(mxc,2) + +Math.pow(myc,2));
					// console.log(cut);
					
					if(cut < 200){
						axt.beginPath();
							axt.lineWidth = 0.1;
							axt.strokeStyle = 'rgba(' + c1 + ',' + c2 + ',' + c3 + ',' + opline + ')';
							axt.moveTo(mx, my);
							axt.lineTo(mxa, mya);
							axt.stroke();
					}
				}
				}
				// console.log(dots)
			}
			window.setInterval(()=>{
					active();
			},10);

		</script>
	</body>
</html>


资源下载 0积分

在这里插入图片描述

链接: 背景文件.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻动琴弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值