接触jQuery作了个小练习 砌墙?或者叫盖房子 加了一点动画效果 li之间空格解决

本文介绍了作者使用jQuery进行的一个小实践,通过添加动画效果解决了li元素之间的空格问题,展示了如何在网页中创建动态的砌墙或盖房子效果。读者可以参考提供的链接查看实际效果。
摘要由CSDN通过智能技术生成

学到jQuery 遇到这个例子实现完成觉得没啥特效不好看人家原来是有效果的,做一半怎么能行,(结果还是做一半 只是吧动画加上了)。


=============================
首先遇到几个问题总结一下
1.想用原来的float:left 但是需要用动画 所以需要定位position 结果不能一起用,只好全换了,在尝试的的时候试了一下inline-block(理解不透彻犯了傻),结果肯定是没好用,
2. 然而我发现inline-block会识别 回车也就是两个<li>/*这里的回车*/<li>解决办法很多 我觉得最好的是 font-size:0这个效果最好。
3.暂时想不起来了当时问题挺多的,现在才想起来总结。。。
======================================================

好吧效果就是这样 可以试一试我把代码贴再下面 就是判断整个ul在上一条的左边还是右边 然后 相应的remove 相应个数<li>,根据删除后的li确定 创建新的ul 长度
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
	<style type="text/css">
		#wrap{
			width: 400px;
			height: 500px;
			margin: 0 auto;
			border:1px solid red;
			position: relative;
		}
		ul,li{
			padding: 0;
			margin: 0;
			list-style: none;
		}
		ul{
			height: 12px;
			/*width: */
			/*border:1px solid black;*/
			font-size: 0;/* 解决inline-block 识别空格*/
			/*overflow: hidden;*/
			position: absolute;
			/*border: 1px solid black;*/

		}
		li{
			width: 10px;
			height: 10px;
			border:1px solid green;
			
			background: blue;
			/*display: inline-block;*/
			position: absolute;
			/*float: left;*/
		}
		/*#lia{
			width: 100px;
			height: 100px;
			position: absolute;
			top: 100px;
			background: red;

		}*/
	</style>
</head>
<body>
	<!-- http://www.zhangxinxu.com/wordpress/2012/04/inline-block-space-remove-%E5%8E%BB%E9%99%A4%E9%97%B4%E8%B7%9D/ -->
	<div id="wrap">
		
	</div>
	
	<script type="text/javascript">
		function addli(father,index,createnum) {
			console.log(index);
			
			var ul = $("<ul>");
			father.append(ul);
			for (var i = 0; i < createnum; i++) {
				var li = $("<li>");
				li.css({
					top:0,
					left:12 * i 
				});
				li.appendTo(ul);
			}
			ul.css({
				width:12 * createnum,
				bottom: 12 * index
			});

			move(ul,$('#wrap'));	
		}

		
		function move(tag,father) {
			tag.animate({
				left:father.width() - tag.width()
			},1800,function () {
				tag.animate({
					left:0
				},1800,function () {
					move(tag,father)
				});
			});
		}

		function remove(before, current) {
			var left = $(before.children()[0]).position().left;

			var before_left = before.position().left + left;
			var current_left = current.position().left;
			var difference = current_left - before_left;

			var value = Math.abs(difference);;
			var num = parseInt(value / 12);
			
			if (difference < 0 ) {
				removeanimate(current,num,"left");

			}else{
				removeanimate(current,num,"right");
			}
			return num;

		}
		function removeanimate(father,num,direction) {
			var lis = $(father.children());
			
			if (direction == "left") {
				var i = 0;
				var timer = setInterval(function () {
					$(lis[i]).animate({
						top:'30px',
						opacity: 0.4
					},400,function (argument) {
						this.remove();
						
					});
					i++;
					
					if (i >= num) {
						clearInterval(timer);
					}
				},100)
			}else{
				var k = 0;
				var n = lis.length - 1;
				var timer2 = setInterval(function () {
				
					$(lis[n]).animate({
						top:'30px',
						opacity: 0
					},200,function (argument) {
						this.remove();
						// alert("k=" + k + " n=" + n + " mum=" + num);
						
					});
					 k++;
					 n--;
					  
					if (k >= num) {
						clearInterval(timer2);
					}
				},100)
			}

		}

		


		var index = 0;
		var createnum = 20;
		$("#wrap").click(function () {
			 $($('ul')[$('ul').length -1 ]).stop();

			 
			 if ($('ul').length > 1) {
				 	a = remove( $($('ul')[$('ul').length -2 ]),$($('ul')[$('ul').length -1 ]));
				 	createnum =  createnum - a;
				}
			
			addli($("#wrap"),index,createnum);// 添加并移动
			
			
			index++;
		});
		/*
		function removeanimate(father,num) {
			// var lis = $("li");
			var lis = $(father.children());
			// console.log($(lis[0]));
			
			var i = 0;
			var timer = setInterval(function () {
				
				
				$(lis[i]).animate({
					top:'30px',
					opacity: 0.4
				},400,function (argument) {
					this.remove();
					
				});
				i++;
				if (i >= num) {
					clearInterval(timer);
				}
			},100)
			
				
		}

		function remove(before, current) {
			var left =$(before.children()[0]).position().left;
			
			var before_left = before.position().left + left;
			var current_left = current.position().left;
			var difference = current_left - before_left;

			var direction_left = true;
			if (difference > 0 ) {
				direction_left = false;
			}
			
			var value = Math.abs(difference);;
			var num = parseInt(value / 12);
			
			removeanimate(current,num);


			
				if (!direction_left) {
			
					for (var j = 0; j < current.children().length; j++) {
						// console.log(j);
						$(current.children()[j]).css({
							left: $(current.children()[j]).position().left -num *12
						})
					}
					console.log( $(current.children()[0]).position().left)
					
				}
				return num;
	
			}
			*/
	</script>
</body>
</html>

既然都看到这了 可以看看效果http://www.jq22.com/jquery-info18978

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
游戏说明:<br>一个5*5的方格 打算往每个格子里放房子,有4种颜色的房子 <br>蓝色的房子 占10人口 随便放在哪里都行 <br>红色的房子 占20人口 要求和蓝色的房子相邻 <br>绿色的房子 占30人口 要求和蓝色,红色的房子相邻 <br>黄色的房子 占40人口 要求和蓝色,红色,绿色的房子相邻 <br>问 如何放置 才能使5*5的格子占用的人口数量最大?<br><br>操说明:<br>拉动各颜色的房子到欲放置的格子处释放鼠标,如果格子符合该颜色房子的需求则房子成功放入,否则房子不放入,如:欲放黄色房子,则本格子上下左右需存在蓝绿红三种房子。 <br>单击任何一个格子弹出该格子当前可放入的房子选项,双击房子即可放入,或者选中其中一个后按回车或点选择亦可放入。 <br>双击有房子的格子或房子即可拆掉此房子。 <br>键盘操: <br>按上下左右箭头可在表格内移动,当前格子背景色为黑色,如无选中则从第一行第一列开始,按回车后选择房子,按Delete或“.”为拆掉房子。 <br>如果弹出选择房子时,上下左右箭头为选择当前格子可用的房子(如:向放黄色房子需先在需要放置的格子上下左右格放好蓝绿红房子,方可选择),按下回车后此房子入格子内,Esc键为不做选择并关掉选择房子。 <br>如果拆除房子的邻居有对本房子要求时本房子不可拆除,需先拆除对于本房子做要求的房子,如:想拆掉蓝色房子,但上下左右有红色房子则需先拆掉红色房子方可拆掉蓝色房子。
游戏说明:<br>一个5*5的方格 打算往每个格子里放房子,有4种颜色的房子 <br>蓝色的房子 占10人口 随便放在哪里都行 <br>红色的房子 占20人口 要求和蓝色的房子相邻 <br>绿色的房子 占30人口 要求和蓝色,红色的房子相邻 <br>黄色的房子 占40人口 要求和蓝色,红色,绿色的房子相邻 <br>问 如何放置 才能使5*5的格子占用的人口数量最大?<br><br>操说明:<br>拉动各颜色的房子到欲放置的格子处释放鼠标,如果格子符合该颜色房子的需求则房子成功放入,否则房子不放入,如:欲放黄色房子,则本格子上下左右需存在蓝绿红三种房子。 <br>单击任何一个格子弹出该格子当前可放入的房子选项,双击房子即可放入,或者选中其中一个后按回车或点选择亦可放入。 <br>双击有房子的格子或房子即可拆掉此房子。 <br>键盘操: <br>按上下左右箭头可在表格内移动,当前格子背景色为黑色,如无选中则从第一行第一列开始,按回车后选择房子,按Delete或“.”为拆掉房子。 <br>如果弹出选择房子时,上下左右箭头为选择当前格子可用的房子(如:向放黄色房子需先在需要放置的格子上下左右格放好蓝绿红房子,方可选择),按下回车后此房子入格子内,Esc键为不做选择并关掉选择房子。 <br>如果拆除房子的邻居有对本房子要求时本房子不可拆除,需先拆除对于本房子做要求的房子,如:想拆掉蓝色房子,但上下左右有红色房子则需先拆掉红色房子方可拆掉蓝色房子。 <br>按Ctrl+Z可后退一步,如果后退后未再做操按Ctrl+Y可前进一步,可多次后退或前进(在房子总数足够或后退步数足够的情况下),反之后退前进无效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值