js拖拽实现动态评分以及九宫格的实现

30 篇文章 0 订阅
25 篇文章 0 订阅

拖拽实现动态评分效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			body,i,em{padding: 0;margin: 0;}
			i,em{font-style: normal;}
			#box{
				position: relative;
				height: 300px;
				width: 400px;
				margin: 50px auto;
				line-height: 30px;
			}
			#sp1{
				position: absolute;
				text-align: center;
				left: 0;
				display: block;
				width: 30px;
				height: 30px;
				border:solid #0f0 1px;
			}
			i{
				position: absolute;
				left: 40px;
				width: 30px;
				height: 30px;
				display: block;
			}
			em{
				position: absolute;
				right: 0;
				width: 30px;
				height: 30px;
				display: block;
			}
			#box1{
				position: absolute;
				left: 60px;
				top:5px;
				width: 300px;
				height: 20px;
				border-radius: 15px;
				border: 1px solid #cecece;
			}
			#box2{
				width: 0px;
				height: 20px;
				border-radius: 15px 0 0 15px;
				background: #00FF00;
			}
			#sp2{
				height: 25px;
				top:-3px;
				width: 5px;
				border-radius: 5px;
				position: absolute;
				background: #008000;
			}
		</style>
	</head>
	<body>
		<div id="box">
			<span id="sp1">0.0</span>
			<i>0</i>
			<div id="box1">
				<div id="box2">
					<span id="sp2"></span>
				</div>
			</div>
			<em>5</em>
		</div>
		<script type="text/javascript">
			function $(id){//取id函数
				return document.getElementById(id);
			}
			//获取dom对象
			var oSp1 = $("sp1");
			var oSp2 = $("sp2");
			var oBox1 = $("box1");
			var oBox = $("box");
			var oBox2 = $("box2");
			
			oSp2.onmousedown = function(e){
				var evt = e || event;
				var x =  evt.clientX - oSp2.offsetLeft;
				
				document.onmousemove = function(e){
					var evt = e || event;
                    oSp2.style.left = evt.clientX - x + "px";
                    oBox2.style.width  = event.clientX - x + "px";
                   var biLi = 5*(evt.clientX - x)/280;//按比例变化

                   if (evt.clientX - x<=0) {
                       oSp2.style.left = "0";
                       biLi = 0;
                   }
                   if (event.clientX - x>=280) {
                       oSp2.style.left = "300px";
                       oBox2.style.width = "300px";
                       biLi = 5;
                   }
                  oSp1.innerHTML = biLi.toFixed(1);//取一位小数
               }
               document.onmouseup = function () {
                   document.onmousemove = null;
                   document.onmouseup = null;
               }

               return false;
           
			}
		
		</script>
	</body>
</html>

九宫格效果

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>九宫格</title>
		<style type="text/css">
			#wrap {
				position: relative;
				margin-left: 50px;
			}
			
			#wrap div {
				width: 100px;
				height: 100px;
				line-height: 100px;
				font-size: 50px;
				position: absolute;
				border-radius: 10px;
				text-align: center;
			}
		</style>
	</head>

	<body>
		<div id="wrap">

		</div>

		<script type="text/javascript">
			//创建div
			var oWrap = document.getElementById("wrap");
			var mt = ml = 10; //设置间距
			for(var i = 0; i < 3; i++) { //行数
				for(var j = 0; j < 3; j++) { //列数
					var oDiv = document.createElement("div"); //创建div
					oWrap.appendChild(oDiv); //放入大盒子里
					oDiv.style.top = i * (oDiv.offsetHeight + mt) + "px"; //每一行的定位
					oDiv.style.left = j * (oDiv.offsetWidth + ml) + "px"; //每一列的定位
					oDiv.style.background = "rgb(" + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + "," + Math.floor(Math.random() * 256) + ")"; //每个div加随机颜色
				}
			}

			//向div中放置文本
			var arr = ["A", "B", "C", "D", "E", "F", "G", "H", "I"];
			var aItems = oWrap.children;
			for(var i = 0; i < aItems.length; i++) {
				aItems[i].innerHTML = arr[i];
			}

			//拖拽     onmousedown   onmousemove  onmouseup
			for(var i = 0; i < aItems.length; i++) {
				aItems[i].onmousedown = function(e) {
					var evt = e || event;
					//获取鼠标相对于事件源的坐标
					var x = evt.offsetX;
					var y = evt.offsetY;

					var dragItem = this; //下面用到div
					var cloneNode = dragItem.cloneNode();//克隆新节点
					oWrap.replaceChild(cloneNode, dragItem);//替换
					oWrap.appendChild(dragItem);//放入div中
					//设置样式
					cloneNode.style.border = "1px dashed #eee";
					dragItem.style.zIndex = 1;

					document.onmousemove = function(e) {
						var evt = e || event;
						var _left = evt.clientX - x - oWrap.offsetLeft;
						var _top = evt.clientY - y - oWrap.offsetTop;
						dragItem.style.top = _top + "px";
						dragItem.style.left = _left + "px";
						return false;
					}
					document.onmouseup = function() {

						document.onmousemove = null;
						//两个空数组来去最小索引,也可以用Math.min.apply()方法来取最小索引
						var disArr = [];
						var newArr = [];
						for(var i = 0; i < aItems.length - 1; i++) {
							var disx = dragItem.offsetLeft - aItems[i].offsetLeft;
							var disy = dragItem.offsetTop - aItems[i].offsetTop;
							var dis = Math.sqrt(Math.pow(disx, 2) + Math.pow(disy, 2));
							disArr.push(dis);
							newArr.push(dis);
						}
						//排序,数组发生改变
						disArr.sort(function(a, b) {
							return a - b;
						})

						//取对应最小索引值
						var minVal = disArr[0];
						var minIndex = newArr.indexOf(minVal);

						//交换位置
						dragItem.style.left = aItems[minIndex].style.left;
						dragItem.style.top = aItems[minIndex].style.top;

						aItems[minIndex].style.left = cloneNode.style.left;
						aItems[minIndex].style.top = cloneNode.style.top;

						oWrap.removeChild(cloneNode);

						document.onmouseup = null;

					}
					return false;
				}
			}
		</script>
	</body>

</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用HTML5中的draggable属性和JavaScript来实现九宫单元效果。以下是一个简单的实现: HTML: ``` <div class="grid"> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> <div class="cell" draggable="true"></div> </div> ``` CSS: ``` .grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 10px; } .cell { width: 100%; height: 100%; background-color: #ddd; } ``` JavaScript: ``` var cells = document.querySelectorAll('.cell'); var draggingCell = null; for (var i = 0; i < cells.length; i++) { var cell = cells[i]; cell.addEventListener('dragstart', function() { draggingCell = this; setTimeout(function() { draggingCell.style.display = 'none'; }, 0); }); cell.addEventListener('dragend', function() { draggingCell.style.display = 'block'; draggingCell = null; }); cell.addEventListener('dragover', function(e) { e.preventDefault(); }); cell.addEventListener('dragenter', function(e) { e.preventDefault(); this.classList.add('hover'); }); cell.addEventListener('dragleave', function() { this.classList.remove('hover'); }); cell.addEventListener('drop', function() { if (this !== draggingCell) { var temp = this.innerHTML; this.innerHTML = draggingCell.innerHTML; draggingCell.innerHTML = temp; } this.classList.remove('hover'); }); } ``` 这段代码首先选择所有的单元,然后为每个单元添加事件监听器。当一个单元开始被时,我们把它的引用存储在draggingCell变量中,并且在0ms后将其隐藏。当单元结束时,我们恢复其显示状态并将draggingCell变量设置为null。 当一个单元到另一个单元上时,我们使用preventDefault()方法来防止默认的drop事件发生,并且给目标单元添加一个.hover类。当离开一个单元时,我们移除.hover类。当一个单元被放置时,我们检查是否目标单元不是当前的单元,如果不是,我们交换它们的innerHTML。 最后,我们使用CSS来布局九宫,并将每个单元设置为可的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值