jQuery 拼图实例

HTML 文档

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>jQuery</title>
		<link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
		<link rel="stylesheet" type="text/css" href="css/bootstrap-responsive.css"/>
		<link rel="stylesheet" type="text/css" href="css/user.css"/>
		
		<script src="js/jquery-2.1.3.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript" src="js/user.js" ></script>
	</head>
	<body>
		
		<div class="container background-main">
			<div class="image-item img1" id="img1"></div>
			<div class="image-item img2" id="img2"></div>
			<div class="image-item img3" id="img3"></div>
			<div class="image-item img4" id="img4"></div>
			<div class="image-item img5" id="img5"></div>
			<div class="image-item img6" id="img6"></div>
			<div class="image-item img7" id="img7"></div>
			<div class="image-item img8" id="img8"></div>
			<div class="image-item img9" id="img9"></div>
		</div>
		<audio src="music/slide.mp3" id="music"></audio>
		
	</body>
</html>


CSS文件

.background-main{
	margin-top: 20px;
	margin-left: auto;
	margin-right: auto;
	position: relative;
}

.image-item{
	width: 245px;
	height: 200px;
	position: absolute;
	/*background: no-repeat center top fixed;*/
	/*background-size:100% 100%;*/
	/*background-color: red;*/
	float: left;
}

.img1{
	left: 0px;
	top: 0px;
}
.img2{
	left: 245px;
	top: 0px;
}
.img3{
	left: 490px;
	top: 0px;
}
.img4{
	left: 0px;
	top: 200px;
}
.img5{
	left: 245px;
	top: 200px;
}
.img6{
	left: 490px;
	top: 200px;
}
.img7{
	left: 0px;
	top: 400px;
}
.img8{
	left: 245px;
	top: 400px;
}
.img9{
	left: 490px;
	top: 400px;
}


#img1{
	background: url(../img/img0.png);
	background-size:100% 100%;
}
#img2{
	background: url(../img/img1.png);
	background-size:100% 100%;
}
#img3{
	background: url(../img/img2.png);
	background-size:100% 100%;}
#img4{
	background: url(../img/img3.png);
	background-size:100% 100%;}
#img5{
	background: url(../img/img4.png);
	background-size:100% 100%;}
#img6{
	background: url(../img/img5.png);
	background-size:100% 100%;}
#img7{
	background: url(../img/img6.png);
	background-size:100% 100%;}
#img8{
	background: url(../img/img7.png);
	background-size:100% 100%;
}
#img9{
	background: url(../img/img8.png);
	background-size:100% 100%;
}


jQuery 文件


var sum = 0; // 存放所有方块对应值的和
var arr = []; // 存放8块图片的容器

window.onload = function() {
	
	// 随机产生不相同的8个随机数
	var index = [];
	for(var i = 0; i < 8; i++){
		index[i] = parseInt(Math.random()*8);
		for(var j = 0; j < i; j++){
			if(index[i] == index[j]){break;}
		}
		if(j != i){i--;}
	}
	
	
	// 获得所有方块对应值的和
	$.each($('.image-item'), function() {
		sum += parseInt($(this).css("left")) + parseInt($(this).css("top"));
	});
	
	// 把浮动的8个方块的名字,存入容器
	for(var i = 1; i < 9; i++){
		var str = "img" + i;
		arr[i-1] = document.getElementById(str);
	}
	
	// 打乱8块方块位置
	for(var i = 0; i < 8; i++) {
		var mod = i - parseInt(i / 3) *3;
		var setLeft = mod * 245;
		var setTop = parseInt(i / 3) * 200;
		arr[index[i]].style.left = setLeft + "px";
		arr[index[i]].style.top = setTop + "px";
	}

	// 隐藏第九块图片
	$("#img9").hide(); // $("#img9").show();
	
	// 绑定每块图片的单击事件
	$('.image-item').click(function(){
		
		// 存放单击图片对应的数值
		var num = parseInt($(this).css("left")) + parseInt($(this).css("top"));
		
		// 存放当前8块方块对应值的和
		var presentSum = 0;
		
		// 计算当前8块方块对应值的和
		for(var i = 0; i < arr.length; i++) {
			presentSum += parseInt($(arr[i]).css("left")) + parseInt($(arr[i]).css("top"));
		}
	
		// 存放当前空格对应的要数值
		var notExist = 0;
		// 计算9块方格中,哪一块是空的
		notExist = sum - presentSum;
		
		// 标识 
		var flag = notExist - num;
		
		// 触发声音
		document.getElementById("music").play();
		
		// 判断方块的移动方向
		if(flag == 200 || flag == -200) {
			var setTop = parseInt($(this).css("top")) + flag;
			// 上下移动方块(带动画)
			$(this).animate({top: setTop + "px"});
		} else if(flag == 245 || flag == -245) {
			var setLeft = parseInt($(this).css("left")) + flag;
			// 左右移动方块(带动画)
			$(this).animate({left: setLeft + "px"});
		}
		
		
		
		// 判断是否拼好
		var judge = []; // 存放当前所有方块对应的值
		for(var i = 0; i < 8; i++) {
			judge[i] = parseInt(arr[i].style.left) + parseInt(arr[i].style.top);
			if(judge[i] == num) {
				judge[i] += flag;
			}
		}
		
		for(var j = 0; j < 8; j++) {
			var mod = j - parseInt(j / 3) *3;
			var setLeft = mod * 245;
			var setTop = parseInt(j / 3) * 200;
			var temp = setLeft + setTop;
			if(temp != judge[j]) {
				break;
			}
		}
		
		if(j == 8) {
			// 显示第九块图片
			$("#img9").slideDown();
			// 取消单击绑定
			$('.image-item').unbind("click")
		} 
		
	});
	
	
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值