- 浏览: 25387 次
- 性别:
- 来自: 北京
最新评论
-
梧栖凤:
得把未经处理的脚本分享出来啊!
跨浏览器可8方向拖拽剪裁框 -
percy30856:
好东西 正在弄这个玩意儿 参考学习了
Animate Baseclass -
percy30856:
菲哥 你的头像,应该换成未满18岁禁止查看
很棒的时间线控件 -
stoneskin:
:哭笑写javascript的也是猿。。。。我们很多猿都是从写 ...
核心只要两行即可实现添加或移除className -
jamesmos:
enix2212 写道tiannet 写道enix2212 写 ...
核心只要两行即可实现添加或移除className
1.跨浏览器,主流浏览器都可以运行
2.纯javascript开发。
3.配置实用方便。
4.二次开发简单,易用。
传送门 在线试玩
成品预览,见附近
用一张图片用坐标的方式生成拼图单元格,类似css sprite。大致思路是,每个单元格有对应的两个索引,由数据驱动显示。创建实例时吧0-9乱序排列,每个单元格对应两个索引,一个是真实所在位置的索引,一个是记录现在位置的索引。拖动图片的时调整记录现在位置的索引,去对比原始数组如果值相等,那么就可以确定拼图完成。
1.乱序排列[0-9]的数组生成一个新数组,来产生拼图单元格的排序。为了避免生成不符合需求的数组,比较然后递归。
indicator.fn.unordered = function (array) { //乱序排列 array=array || [0,1,2,3,4,5,6,7,8,9]; if (({}).toString.call(array).indexOf('Array') === -1) return; var arr = [], value = array.toString(); arr = array.sort(function () { return Math.random() > 0.5 ? -1 : 1; }); (arr.toString() === value) && arguments.callee(array); return arr; };
2.主要难点在于拖拽时实时去检测现在单元格与其他单元格的位置关系,判断拖动的单元格是不是进入其他单元格而不是在自己的占位单元格。如果不符合要求,则把拖拽元素放回原始位置。
indicator.fn.checkPosition=function(e){ //检查单元格位置,符合条件插入 不符合条件放回原处 e=that.getEvent(e); var i=that.htmls.length,size=null,pointer = [e.clientX,e.clientY]; for(;i--;){ size=that.getClinetRect(that.htmls[i]); if(size.top < pointer[1] && size.bottom>pointer[1]){ if(size.left<pointer[0] && size.right>pointer[0]){ that.htmls[i]===indicator.currentTarget || that.replaceElement(that.htmls[i]); }else{ that.restore(); } } } };
3.为了避免拖拽元素时导致单元格产生的重新排列导致的错位,所以要产生一个占位单元格,这占位的单元格克隆自拖拽单元格。
indicator.fn.createPlaceholder=function(T){ var node=T.cloneNode(true); node.innerHTML=''; node.style.display='none'; node.className='placeholder'; T.parentNode.insertBefore(node,T); that.placeholder=node; };
4.界定拖拽单元格是否进入其他单元格,左顶点大于当前单元格的top,left但是小于当前单元格的bottom,right
indicator.fn.checkPosition=function(e){ //检查单元格位置,符合条件插入 不符合条件放回原处 e=that.getEvent(e); var i=that.htmls.length,size=null,pointer = [e.clientX,e.clientY]; for(;i--;){ size=that.getClinetRect(that.htmls[i]); if(size.top < pointer[1] && size.bottom>pointer[1]){ if(size.left<pointer[0] && size.right>pointer[0]){ that.htmls[i]===indicator.currentTarget || that.replaceElement(that.htmls[i]); }else{ that.restore(); } } } };
5.调整单元格时,要改变拖拽单元个的两个记录位置的属性,还要改变当前单元格的两个位置属性,再调整记录位置的数组
这里的处理我觉得也是最繁复最有挑战的地方,修改了很久
indicator.fn.replaceElement=function(targetNode){ //摆放单元至正确位置 var current=indicator.currentTarget,k1=that.htmls,k2=that.sn,temp,j=0,k=0,a1=[-1,-1],a2=null,a3=-1,arr=[],parent=that.parent.children[0],li; current.style.position='static'; that.index=[]; for(;k<k1.length;k++){ if(targetNode===that.htmls[k]) {a1[0]=k;} if(current===that.htmls[k]) {a1[1]=k;} } a1.sort(); a2=k1[a1[0]]; k1[a1[0]]=k1[a1[1]]; k1[a1[1]]=a2; a3=k2[a1[0]]; k2[a1[0]]=k2[a1[1]]; k2[a1[1]]=a3; parent.innerHTML=''; for(;j<k1.length;j++){ li=that.htmls[j]; that.index.push(that.htmls[j].index); try{parent.appendChild(li)}catch(e){} } };
6.在释放鼠标时,检查原始数组和记录位置数组的值十分相等,确定是不是拼图完成。
that.index.join('')===that.sn.sort().join('')
发表评论
-
避免悲剧 密码生成器
2011-12-22 15:35 786最近被暴库的很多,密码安全成为重大问题!如何避免简单密码呢?还 ... -
jQuery创建实例与原型继承揭秘
2011-12-20 23:57 812在普通情况下 ... -
[Javascript]单例模式(singleton )
2011-12-16 15:23 1358Javascript中大家都很习惯用new运算符创建实例。现在 ... -
javascript1.7新语法
2011-12-13 18:30 9221.yield 关键字 Yield的作用与return 差不多 ... -
javascript undo redo
2011-12-09 10:55 2422在浏览器中用调试工具看调用结果 <!DOCTYPE ... -
duffsDevice 高速版
2011-11-25 17:21 838function duffsDevice(items, f ... -
ECMAScript.js2
2011-11-07 11:18 1386package { public native functio ... -
仅限正整数输入
2011-10-27 15:35 914修正了拖拽文本进输入框问题 2011.11.14 &l ... -
Another JavaScript quiz
2011-08-19 18:34 688测试题来自《Another JavaScript quiz》P ... -
跨浏览器可8方向拖拽剪裁框
2011-08-15 20:01 980<!DOCTYPE html PUBLIC &quo ... -
选项卡
2011-08-12 17:36 935<!DOCTYPE html PUBLIC &quo ... -
scroll base
2011-08-04 14:25 938开发版,水平方向已完成,垂直方向没测,可以跨浏览,滚动多个当前 ... -
拖拽排序列表单例
2011-07-27 11:17 1213<!DOCTYPE html PUBLIC &quo ... -
Animate Baseclass
2011-07-12 15:47 1243以下代码仅供参考,请下载附件代码,应该是文本编辑器过滤掉了某些 ... -
很棒的时间线控件
2011-06-24 18:52 1766原生态javascript,希望大家能喜欢 functio ... -
fade方法
2011-05-27 10:12 815function fadeOut(steps){ ... -
核心只要两行即可实现添加或移除className
2011-04-29 11:10 1816<div id="abc" cl ... -
让函数有记忆能力
2011-04-28 15:34 737function addEvent(elem,evType ... -
可以跳动的手风琴 Accordion
2011-04-13 15:02 847<!DOCTYPE html PUBLIC &q ... -
javascript new 关键字的运行原理
2011-04-06 17:33 1580function javascriptNew(t){ a= ...
相关推荐
【标题】"jQuery实现的9宫格拼图游戏效果.zip" 涉及到的核心知识点是使用jQuery库来创建一个互动式的9宫格拼图游戏。jQuery是一个广泛应用于Web开发的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计以及...
在编程领域,特别是在游戏开发中,"9宫格数学拼图"是一种常见的逻辑挑战游戏,也被称为数独的简化版。它基于一个3x3的矩阵,每个单元格包含数字1到9,目标是通过填充空白单元格使每一行、每一列以及每个3x3的小宫格...
【C# 9宫格或8数码拼图游戏】是一种基于C#编程语言开发的智力游戏,也称为“滑动拼图”或“15拼图”。它在计算机科学领域中是一个经典的问题,通常用于教学和算法实践。这个游戏的目标是通过移动空格,将打乱顺序的...
本项目将A*算法巧妙地应用到了一个简单的9宫格拼图游戏中,为玩家提供了一种直观理解A*算法工作原理的方式。下面,我们将深入探讨A*算法及其在9宫格拼图游戏中的具体实现。 首先,A*算法的核心在于其启发式搜索策略...
安卓6宫格图片拼图组图,拼图预览,文字添加
标题中的“九宫格十二宫格自定义宫格小程序拼图游戏”表明这是一个基于微信小程序开发的拼图游戏,它可以适应不同的宫格模式,包括常见的九宫格和十二宫格,同时支持用户自定义宫格数量,提高了游戏的可玩性和趣味性...
本文将深入探讨如何使用NetBeans IDE来开发一款9宫格拼图游戏。NetBeans是一款强大的开源集成开发环境,支持多种编程语言,包括Java,它以其友好的界面和丰富的功能深受开发者喜爱。 首先,我们要理解9宫格拼图游戏...
在游戏开发或UI设计中,9宫格缩放是一种常见的技术,它允许图片在保持角部不变形的情况下进行拉伸,从而在不同尺寸的屏幕上呈现出更加自然的视觉效果。 在Starling框架中,原生并不直接支持9宫格缩放,但通过自定义...
javascript H5 APP网页游戏_九宫格,16宫格抽奖大转盘(源代码)
同时,这个项目也可以作为进一步开发的基础,比如将其扩展为其他类型的拼图游戏,增加难度等级,或者与其他玩家在线竞技。 总的来说,《十五宫格拼图/数字游戏》不仅是一个有趣的休闲活动,也是学习和实践Delphi...
在iOS开发中,创建一个9宫格界面是常见的任务,特别是在设计用户交互界面时,用于展示功能模块或者图片。这个场景通常涉及到自定义UICollectionView或UItableView的实现,因为这两种组件都可以方便地创建网格布局。...
《jQuery N宫格拼图游戏详解》 在IT领域,游戏开发始终是吸引人们注意力的一个重要方向,尤其在网页端,轻量级的游戏更是受到广大用户的喜爱。本篇将深入探讨一个基于jQuery实现的N宫格拼图游戏,旨在帮助读者理解...
这是 android手机 9宫格解锁软件 任何一款手机都可以装 经测试 100%可信
9宫格的设计理念源于中国古代的九宫格数学游戏,它强调对称和平衡,这在UI设计中是非常重要的。在实际应用中,9宫格不仅限于9个方格,也可以根据需要扩展为更多格子,或者通过折叠、滑动等方式动态调整显示内容。 ...
《人物拼图游戏(九宫格)》是一个基于.NET C#平台开发的益智类游戏,它在Visual Studio 2017环境下被成功编译并经过了充分的测试,确保了程序的稳定性和功能的完整性。这个游戏的核心设计是将一个九宫格中的图像...
在这个“多宫格自定义拼图游戏”项目中,我们可以看到易语言在游戏开发领域的应用。这个游戏的核心功能包括以下几个方面: 1. **宫格尺寸自定义**:游戏允许玩家选择宫格的大小,这意味着程序需要能够动态调整网格...