HTML文字波浪形移动和复原

代码如下所示:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
	html,body{
		height:100%;
	}
/* 	#demop{
	position:absolute;
} */
	#demop span{
		position:relative;
	}
	</style>
</head>
<body>
	<p id="demop">江南皮革厂!江南皮革厂倒闭了!王八蛋黄鹤欠了我们3.5个亿,跟着他的小姨子跑了。</p>
	<script>
	var reset=null;		/*复位用的计时器变量*/
	

	var locations={		/*记录当前鼠标的位置信息*/
		left:0,
		top:0
	};
	var localArr=[];     /*记录一段时间内鼠标移动的位置,长度为文字的个数*/
	var arrLength=0;	 /*一段时间内鼠标移动位置的个数*/

	class init{			 /*初始化段落文字,将其分割并封装在<span></span>中*/
		constructor(node){
			var arr=node.innerHTML.split("");
			arrLength=arr.length;
			
			for(var i=0;i<arrLength;i++){
				localArr.push({left:0,top:0});
			}

			arr=arr.map(function(value){
				/*return value="<span>"+value+"</span>";*/
				return value=`<span>${value}</span>`;
			});
			//console.log(arr);
			node.innerHTML=arr.join("");
		}
	}

	var demop=document.getElementById("demop");
	new init(demop);
	var aSpan=demop.children;

	function pMove(lt){			/*当鼠标移动时,触发的文字渲染方法*/
		localArr.unshift(lt);
		//console.log(localArr);
		[].forEach.call(aSpan,function(value,index,item){
			value.style.left=localArr[index].left+"px";
			value.style.top=localArr[index].top+"px";
			value.style.transition="0s 0s";
		});
		
		(localArr.length>aSpan.length)&&(localArr.pop());
	}

	document.body.addEventListener("mousemove",function(e){			/*获取鼠标当前的位置*/
		clearTimeout(reset);
		locations={
			left:e.clientX,
			top:e.clientY
		};
		pMove(locations);
		reset=setTimeout(function(){			/*当鼠标停止时间超过0.5秒时,触发的事件*/
			for(var i=0;i<arrLength;i++){
				localArr[i]=locations;
			}
			//console.log(localArr);
			[].forEach.call(aSpan,function(value,index,item){
				value.style.left=localArr[index].left+"px";
				value.style.top=localArr[index].top+"px";
				value.style.transition=".2s "+(index*0.03)+"s";
			});
		},500);
	});

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

效果图如下:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值