一个没卵用的鼠标骚特效

之前在看一个老哥的博客看到一个比较骚的特效,就是当鼠标移动,后面跟着一条小尾巴,依次是富强、民主等等,于是自己就尝试写代码实现一下,所以我弄了个原生的js实现方法,如果使用jQuery代码更简单,想要我就写。


先上代码

<script>

(function () {
	//不赞成显式地使用Array构造函数来创建数组,也就是尽量不要用new Array()
	var arr = ["富强", "民主", "文明", "和谐", "自由", "平等", "公正", "法治", "爱国", "敬业", "诚信", "友善"];	
	var aIndex = 0;
	document.onmousemove = function (ev) {
		var oEvent = ev ? ev : window.event;
		var tSpan = document.createElement('div');
		aIndex = (aIndex + 1) % arr.length;
		var sTxt = document.createTextNode(arr[aIndex]);
		tSpan.appendChild(sTxt);
		//不要一条一条地修改DOM的样式,只是让你们看一下,不要这样写
		tSpan.style.left = (oEvent.clientX - 35) + 'px';
		tSpan.style.top = (oEvent.clientY - 20) + 'px';
		tSpan.style.position = 'absolute';
		tSpan.style.width = '34px';
		tSpan.style.height = '17px';
		tSpan.style.fontWeight = "bold";
		tSpan.style.color = "#2B9499";
		tSpan.style.fontSize = 20;
		tSpan.style.opacity = 0.76;
		tSpan.style.zIndex = 100000;
		document.body.appendChild(tSpan);
		setTimeout(function () {
			document.body.removeChild(tSpan);
		}, 380)
	}
})();
</script>

稍微解释一下:

1、首先使用的是立即执行函数,这个表示直接调用执行
2、然后添加了事件监听onmousemove,当鼠标移动时就执行
3、aIndex每次加1,取arr元素,你也可以写成随机来取,要放到监听外,不然每次都会置0,就只能取“民主”
4、首先使用document.createElement()来创建div元素,然后使用document.createTextNode()来创建新文本节点,参数是要插入的文本,然后将文本节点插入div,然后把div插入body
5、然后就是对一些样式的修改,对文本样式修改不要对sTxt来改,对div来改,还有zIndex表示堆叠顺序,越大越靠前
6、也设了一个定时器,380ms移除插入bodydiv元素,不然就会一直存在
7、如果太烦,可以将onmousemove换成onmousedown之类的事件,这样就会变成点击的时候出现,试一下
8、不要一条一条地修改DOM的样式,不要像上面那样写,上面只是写出样式
9、设置为不可点击,这样就不会妨碍点击,自己加


维尼聚合工具


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,下面是一个简单的示例代码,可以实现鼠标移动时,产生星星特效的效果: HTML代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>鼠标粒子星星特效</title> <style> canvas { position: absolute; top: 0; left: 0; z-index: -1; } </style> </head> <body> <h1>鼠标粒子星星特效</h1> <canvas id="canvas"></canvas> <script src="stars.js"></script> </body> </html> ``` JS代码(保存为stars.js文件): ```javascript var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'), stars = [], maxStars = 100; canvas.width = window.innerWidth; canvas.height = window.innerHeight; function Star() { this.x = Math.random() * canvas.width; this.y = Math.random() * canvas.height; this.radius = Math.random() * 2; this.vx = Math.random() * 0.5 - 0.25; this.vy = Math.random() * 0.5 - 0.25; } Star.prototype.move = function() { this.x += this.vx; this.y += this.vy; if (this.x < -this.radius || this.x > canvas.width + this.radius) { this.vx = -this.vx; } if (this.y < -this.radius || this.y > canvas.height + this.radius) { this.vy = -this.vy; } } Star.prototype.draw = function() { ctx.beginPath(); ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2); ctx.fillStyle = '#fff'; ctx.fill(); } function drawStar() { for (var i = 0; i < maxStars; i++) { stars[i].move(); stars[i].draw(); } } function init() { for (var i = 0; i < maxStars; i++) { stars[i] = new Star(); } setInterval(function() { ctx.clearRect(0, 0, canvas.width, canvas.height); drawStar(); }, 30); } init(); canvas.addEventListener('mousemove', function(e) { for (var i = 0; i < maxStars; i++) { var dx = e.clientX - stars[i].x, dy = e.clientY - stars[i].y, distance = Math.sqrt(dx * dx + dy * dy), force = -distance / 1000; if (distance < 100) { stars[i].vx += dx * force; stars[i].vy += dy * force; } } }); ``` 这段代码实现了鼠标移动时,产生星星特效的效果。具体实现方式是:首先定义一个Star对象,包含星星的位置、大小、速度等属性,并定义move和draw方法分别用于更新星星的位置和绘制星星。然后在init函数中,初始化100个星星,并使用setInterval定时更新画面。最后,使用canvas的mousemove事件,来控制星星的运动方向和速度。 这只是一个简单的示例代码,如果需要更加复杂的效果,可以根据实际需求进行修改和扩展。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值