<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style rel="stylesheet">
.goods {
width: 500px;
border: 1px solid red;
padding: 30px;
height: 150px;;
} .good {
float: left;;
margin: 10px 20px;;
width: 100px;
height: 100px;;
} #one { background: green; } #two { background: black;
color: #ffffff;
} #three { background: pink;
} .destination {
width: 600px;;
height: 500px;
border: 1px solid deepskyblue;
}
</style>
</head>
<body>
默认顺序 1 2 3
<div class="goods">
物品容器
<div class="good" id="temp" data-type="one"> </div>
<div class="good" id="" data-type="two">2</div> </div> 仓库
<div class="destination"> </div>
<script type="text/javascript"> //容器类
function Container(obj) {
this.goods = document.querySelectorAll(obj.goods) || [];
this.rule = obj.rule || [];
this.relSort = [];
this.container = document.querySelector(obj.container) || document.body;
this.ondrag = obj.ondrag || null;
this.addEvent(this.goods);
this.count = this.goods.length;
this.success = obj.success || null;
this.failed = obj.failed || null; } Container.prototype.compare = function (arr1, arr2) {
var result = true;
arr1.forEach(function (item, index) {
if (item != arr2[index]) {
result = false;
}
})
return result;
} Container.prototype.addEvent = function (goods) { var me = this;
Array.prototype.forEach.call(goods, function (item) {
item.setAttribute('draggable', true);
item.ondragstart = function (e) {
if (me.ondrag) {
e.dataTransfer.setData("id", e.target.id);
me.ondrag.call(me, e);
}
}
});
this.container.ondrop = function (e) {
e.preventDefault();
var source = e.dataTransfer.getData("id");
e.target.appendChild(document.querySelector('#' + source));
me.relSort.push(source);
if (me.relSort.length == me.count) {
if (me.compare(me.rule, me.relSort)) {
me.success && me.success.call(me);
} else {
me.failed && me.failed.call(me);
}
}
}
this.container.ondragover = function (e) {
e.preventDefault();
} } var a = new Container({
goods: '.good',//需呀拖动物体的选择器
rule: ['one', 'two', 'three'], //正确的顺序
container: '.destination',// 载体选择器
ondrag: function (e) { //开始拖动事件
},
success: function () {//如果游戏成功 回调函数
alert('你赢了');
},
failed: function () {//如果游戏失败 回调函数
alert('游戏失败');
} }); </script> </body>
</html>

  

drag drop小游戏的更多相关文章

  1. canvas drag 实现拖拽拼图小游戏

    博主一直心心念念想做一个小游戏-  前端时间终于做了一个小游戏,直到现在才来总结,哈哈- 以后要勤奋点更新博客! 实现原理 1.如何切图? 用之前的方法就是使用photoshop将图片切成相应大小的图 ...

  2. HTML5魔法堂:全面理解Drag & Drop API

    一.前言    在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面 ...

  3. Draggabilly – 轻松实现拖放功能(Drag & Drop)

    Draggabilly 是一个很小的 JavaScript 库,专注于拖放功能.只需要简单的设置参数就可以在你的网站用添加拖放功能.兼容 IE8+ 浏览器,支持多点触摸.可以灵活绑定事件,支持 Req ...

  4. 【开源】微信小程序、小游戏以及 Web 通用 Canvas 渲染引擎 - Cax

    Cax 小程序.小游戏以及 Web 通用 Canvas 渲染引擎 Github → https://github.com/dntzhang/cax 点我看看 DEMO 小程序 DEMO 正在审核中敬请 ...

  5. 2048小游戏(Java)(swing实现)(二)

    这里是上一次的成果,只能用鼠标点,没法用键盘 最近扩充了一下知识面,实现了用键盘操控2048小游戏 但是还是不支持同时使用键盘和鼠标同时操作 import javax.swing.*; //impor ...

  6. 2048小游戏(Java)(swing实现)(一)

    自己写的2048小游戏,仅支持鼠标操作 主要是我不知道怎么添加键盘监听 import javax.swing.*; import java.awt.*; import java.awt.event.* ...

  7. 仿苹果电脑任务栏菜单&&拼图小游戏&&模拟表单控件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 【重点突破】——Drag&Drop拖动与释放

    一.引言 在学习HTML5新特性的时候,学到了Drag&Drop这两种拖放API,这里根据拖动的是“源对象”还是“目标对象”做两个小练习,主要是为了理解与应用HTML5为拖放行为提供的7个事件 ...

  9. Chrome自带恐龙小游戏的源码研究(完)

    在上一篇<Chrome自带恐龙小游戏的源码研究(七)>中研究了恐龙与障碍物的碰撞检测,这一篇主要研究组成游戏的其它要素. 游戏分数记录 如图所示,分数及最高分记录显示在游戏界面的右上角,每 ...

随机推荐

  1. [改善Java代码]Lock与synchronized是不一样的

    很多编码者都会还说,Lock类和synchronized关键字用在代码块的并发性和内存上时语义是一样的.

  2. 约瑟夫环(N个人围桌,C语言,数据结构)

    约瑟夫环问题(C语言.数据结构版) 一.问题描述 N个人围城一桌(首位相连),约定从1报数,报到数为k的人出局,然后下一位又从1开始报,以此类推.最后留下的人获胜.(有很多类似问题,如猴子选代王等等, ...

  3. Bootstrap ACE后台管理界面模板-jquery已整理

    做后台通用模板,基于bootstrap,jquery写成的模板,非常齐全.国内不能正常访问google我将不能访问的jquery替换成cdn.bootcss.com网站下的jquery 链接: htt ...

  4. 如何更好的理解(pageX,pageY,clientX,clientY,eventX,eventY,scrollX,scrollY,screenX,screenY,event.offsetX,event.offsetY,offsetLeft,style.left)

    1 pageX,pageY:鼠标指针相对于当前窗口的X,Y坐标,计算区域包括窗口自身的控件和滚动条.(火狐特有) 2 event.clientX,event.clientY:鼠标指针相对于当前窗口的X ...

  5. nginx限制ip请求次数 以及并发次数

    如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...

  6. Cocos2d-x优化中多线程并发访问

    多线程并发访问在Cocos2d-x引擎中用的不是很多,这主要是因为中整个结构设计没有采用多线程.源自于Objective-C的Ref对象,需要使用AutoreleasePool进行内存管理,Autor ...

  7. Mysql 的安装与配置

    MySQL的安装 第1步:下载 第2 步:以管理员身份进行安装 第3步:选择安装类型. 第4步:设置MySQL安装目录,及数据库文件目录 第5步:安装结束,开启配置向导 第6步:选择配置类型 第7步: ...

  8. CSS的兼容性解决方案

    什么是兼容性? 同一个网页,在不同浏览器下(IE6.IE7.IE8)下的显示效果不一致,这就是说"CSS不兼容". IETESTer可以同时测试IE5.5.IE6.IE7.IE8这 ...

  9. 取消定时-CICS

    CICE CA R 做定时的时候最好加上REqID

  10. input内容改变触发事件,兼容IE

    <html> <head> <script type="text/javascript"> window.onload = function() ...