jQuery实现网页拼图游戏
网络编程 2021-07-04 16:47www.168986.cn编程入门
这篇文章主要为大家详细介绍了jQuery实现网页拼图游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
之前看了一个页面中将图片分割的效果,感觉不错,有些好奇他是怎么实现的。
跟搭档说了一下,大概明白。其实就是利用 overflow=hidden ,margin-left, margin- 这三个属性的配合,让人感觉图片被一个个格子地分开了。
刚刚写了个 Jquery的小插件,处理了整个的图片分格化,用户只要指定一个图片就可以自动生成格子图片,还自动生成“打乱”,“复原”,行,列等按钮。具有提示位置正确的图片数的功能。
看效果
1.生成格子图片成功
2.打乱图片次序
3.手动设置行列,这里限定了最大的行列都是 10 ,最小是3,多了会眼花撩乱。
4.打乱
5.去除小格子的边框,去除了图片分格子就不明显了
在页面上这用调用
<div style="width:640px; height:400px;"> <img id="origin" class="myimage" src="11.jpg"/> </div><div id="targetDiv"></div> <script> $(document).ready(function(){ $("#origin").tablePic({ target: 'targetDiv',col:4,row:3,borderColor:'#fff',freeColor:'#cec' }); }); </script>
完整的js
(function($){ / 坐标类 @param {Object} x @param {Object} y @memberOf {TypeName} / function Point(x,y){ this.=x; this.left=y; } / 修正版本,原图右下角的小图不显示,是活动格子 添加 “打乱”,“换图按钮” @param {Object} options @memberOf {TypeName} @return {TypeName} / $.fn.tablePic=function(options){ var DEFAULT={ target:'', row:2, col:2, isBorder:true, borderColor:'#f88', mode:'strict',//是否严格判断格式相邻移到,如果不是strict,那么就是不管怎样都是直接和空白格式内容交换 freeColor:'#92cf28' //空白格子的背景颜色 } var options=$.extend(DEFAULT,options); //系统变量 var SYSTEM={ width:0,height:0, //小格子的大小 sonWidth:0,sonHeight:0, src:null, current:'',correct:0,//正确个数 hits:0//步数 } var parent=null;//这个是待分割的图片 var target=null;//这个是格子存放的容器,一般是一个div,也应该是!!!!!别搞独特=.= //这个是左,上 的margin var margin=new Array(); this.each(function(){ parent=$(this); SYSTEM.src=parent.attr("src"); SYSTEM.width=parseInt(parent.css("width")); SYSTEM.height=parseInt(parent.css("height")); SYSTEM.sonWidth=Math.round(SYSTEM.width/options.col); SYSTEM.sonHeight=Math.round(SYSTEM.height/options.row); init(); initMargin(); }); //初始化目标 function init(){ target=$("#"+options.target); initTarget(); //我们要添加一个空白的divprepend target.append($("<div/>").attr("id","control").css("position","absolute").css("",SYSTEM.height+8+((options.isBorder)?(options.row):0)+'px').css("right","0px").css("width",SYSTEM.Width/3).css("height",SYSTEM.sonHeight) .append($("<span/>").attr("id","correctInfo")) .append($("<button/>").bind("click",function(){initMargin();}).append("复原")) .append($("<button/>").bind("click",function(){mixMargin();}).append("打乱")) .append($("<button/>").attr("id","isBorder").bind("click",function(){border();}).append(((options.isBorder)?"去除":"添加")+"边框")) .append(" 行:") .append($("<select/>").attr("id","rowSelect")) .append("列:") .append($("<select/>").attr("id","colSelect")) ); initSelect(); } function initTarget(){ SYSTEM.sonWidth=Math.floor(SYSTEM.width/options.col); SYSTEM.sonHeight=Math.floor(SYSTEM.height/options.row); target.css("width",SYSTEM.width+'px').css("height",SYSTEM.height+'px'); //是否显示边框 if(options.isBorder){ target.css("width",SYSTEM.width+options.col+'px').css("height",SYSTEM.height+options.row+'px'); } target.css("position","relative"); } / 设置两个 select的属性,并添加事件 / function initSelect(){ for(var i=3;i<=10;i++){ $("#rowSelect").append($("<option/>").attr("vaule",i).append(i)); $("#colSelect").append($("<option/>").attr("vaule",i).append(i)); } target.find("select").each(function(){ $(this).change(function(){ options.row=parseInt($("#rowSelect").val()); options.col=parseInt($("#colSelect").val()); initTarget(); initMargin(); }); }); } / 边框的设置 / function border(){ options.isBorder=!options.isBorder; //initTarget(); //initMargin(); target.children(":not(#control)").children().each(function(){ $(this).css("border-",(options.isBorder?"1px solid "+options.borderColor:"none")).css("border-left",(options.isBorder?"1px solid "+options.borderColor:"none")); }); $("#isBorder").html(((options.isBorder)?"去除":"添加")+"边框"); } function initImage(){ //清空 target target.children(":not(#control)").remove(); $("#rowSelect").val(options.row); $("#colSelect").val(options.col); //生成格子,基本形式 //<div class="miniDiv"> // <div><img src="?????"/></div> // </div> // //为了兼容神奇的ie6,我们添加一个div在外围 var $temp=$("<div/>"); target.append($temp); for(var i=0;i<options.rowoptions.col;i++){ if(margin[i].left==options.col-1&&margin[i].==options.row-1){ $temp.append($("<div/>").attr("id","gz"+(i+1)).css("border-",(options.isBorder?"1px solid "+options.borderColor:"none")).css("border-left",(options.isBorder?"1px solid "+options.borderColor:"none")).css("width",SYSTEM.sonWidth).css("height",SYSTEM.sonHeight).css("overflow","hidden").css("float","left") .append($("<div/>").css("width","100%").css("height","100%").css("background-color",options.freeColor))); SYSTEM.current='gz'+(i+1); } else{ $temp.append($("<div/>").attr("id","gz"+(i+1)).css("border-",(options.isBorder?"1px solid "+options.borderColor:"none")).css("border-left",(options.isBorder?"1px solid "+options.borderColor:"none")).css("width",SYSTEM.sonWidth).css("height",SYSTEM.sonHeight).css("overflow","hidden").css("float","left").append( $("<div/>").css("margin-left",(margin[i].leftSYSTEM.sonWidth)-1+"px").css("margin-",(margin[i].SYSTEM.sonHeight)-1+"px") .append($("<img/>").attr("src",SYSTEM.src).css("width",SYSTEM.width+'px').css("height",SYSTEM.height+'px').css("display","block")) )); } } initHandle(); checkRight(); } //初始化 margin 这个属性 function initMargin(){ var temp=0; for(var i=0;i<options.row;i++){ for(var j=0;j<options.col;j++) margin[temp++]=new Point(i,j); } initImage(); } //打乱图片次序 //使用 margin.splice 不能正确返回被删除的数组元素,这里使用一个 中间 数组进行随机排序 function mixMargin(){ var temp1=new Array(); var temp2=new Array(); for(var i=0;i<options.coloptions.row;i++){ temp2[i]=i; } //使用 js 的splice 函数得到随机排序的数组 for(var i=0;i<options.coloptions.row;i++){ temp1[i]=margin[temp2.splice(Math.floor(Math.random()temp2.length),1)]; } margin=temp1; initImage(); } / 添加事件 @memberOf {TypeName} @return {TypeName} / function initHandle(){ for(var i=0;i<=options.coloptions.row;i++){ $("#gz"+i).bind("click",function(){ var newId=$(this).attr("id"); if(newId==SYSTEM.current) return false; //如果设定了mode为strict,就判断是不是与空白格子相邻,只有相邻了才可以发生效果 if(options.mode=='strict'){ if(SYSTEM.current=='gz0'&&newId!=('gz'+options.col)) return false; var ii=parseInt(newId.substring(2)); var jj=parseInt(SYSTEM.current.substring(2)); if(!(Math.abs(ii-jj)==1||Math.abs(ii-jj)==options.col)) return false; } var temp=$(this).html(); $(this).html($("#"+SYSTEM.current).html()); $("#"+SYSTEM.current).html(temp); SYSTEM.current=$(this).attr("id"); checkRight(); }); } } / 检查当前正确的图片数 / function checkRight(){ SYSTEM.correct=0; for(var i=0;i<options.coloptions.row-1;i++){ var $temp=$("#gz"+(i+1)).children(":first"); if($temp.html()!=''&&parseInt($temp.css("margin-left"))==(-1SYSTEM.sonWidth(i%options.col))&&parseInt($temp.css("margin-"))==(-1SYSTEM.sonHeightMath.floor(i/options.col))){ SYSTEM.correct++; } } showCorrect(); } / 显示正确的图片信息 / function showCorrect(){ $("#correctInfo").html("正确图片:"+SYSTEM.correct+"/"+(options.coloptions.row-1)+" "); } } })(jQuery);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程