博主一直心心念念想做一个小游戏~  前端时间终于做了一个小游戏,直到现在才来总结,哈哈~ 以后要勤奋点更新博客!

实现原理

1.如何切图?

用之前的方法就是使用photoshop将图片切成相应大小的图片。这种做法不灵活,如果要更换图片的话,就得重新去切图,很麻烦。

现在是使用canvas,图片是一整张jpg或者png,把图片导入到canvas画布,然后再调用上下文context的getImageData方法,把图片处理成小图,这些小图就作为拼图的基本单位

 renderImg: function (image) {
var index = 0;
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
this.context.drawImage(image, 300 * j, 300 * i, 300, 600, 0, 0, 300, 300);
this.imgArr[index].src = this.canvas.toDataURL('image/jpeg');
this.imgArr[index].id = index;
index++;
}
}
},

2.如何判断游戏是否结束?

在刚刚生成的小图上面添加自定义属性 , 后期在小图被移动后再一个个判断,如果顺序是对的,那么这张大图就拼接成功, 允许进入下一关;

 isSuccess: function () {
var imgLikeArr = document.querySelectorAll('img'),
imgArr = Array.prototype.slice.call(imgLikeArr),
len = imgArr.length, i,
flag = true, self = this; for (i = 0; i < len; i++) {
if (imgArr[i].id != i) {
flag = false;
}
} if (flag) {
setTimeout(function () {
self.showtip();
}, 200);
}
}

3.如何实现小图片随机排列?

使用math.random

 randomImg: function () {
this.imgArr.sort(function () {
return Math.random() - Math.random();
});
},

4.拖拽功能实现?

drag知识点补充站:

兼容性:IE9+,主流浏览器,移动端所有型号暂不支持

一个完整的drag and drop流程通常包含以下几个步骤:

  1. 设置可拖拽目标.设置属性draggable="true"实现元素的可拖拽.
  2. 监听dragstart设置拖拽数据
  3. 设置允许的拖放效果,如copy,move,link
  4. 设置拖放目标,默认情况下浏览器阻止所有的拖放操作,所以需要监听dragenter或者dragover取消浏览器默认行为使元素可拖放.
  5. 监听drop事件执行所需操作

拖拽事件周期中会初始化一个DataTransfer对象,用于保存拖拽数据和交互信息.以下是它的属性和方法.

  • setData(format, data): 以键值对设置数据,format通常为数据格式,如text,text/html
  • getData(format): 获取设置的对应格式数据,format与setData()中一致

实例代码:

  //监听dragstart设置拖拽数据
on(contain, 'dragstart', function (e) {
var target = getTarget(e); if (target.tagName.toLowerCase() == "img") {
e.dataTransfer.setData('id', e.target.id);
}
}); on(contain, 'drop', function (ev) {
var target = getTarget(ev);
        //交换图片
if (target.tagName.toLowerCase() == "img") {
var originObj = document.getElementById(ev.dataTransfer.getData('id'));
var cache = {
'src': originObj.src,
'id': originObj.id
};
var endObj = ev.target.querySelector('img') || ev.target; originObj.src = endObj.src;
originObj.id = endObj.id;
endObj.src = cache.src;
endObj.id = cache.id; if (originObj.id != endObj.id) {
self.changestep();
} self.isSuccess();
}
}); //取消浏览器默认行为使元素可拖放.
on(contain, 'dragover', function (ev) {
ev.preventDefault();
});

核心代码和思路就是上面这些,其实整个流程走下来还是蛮简单的

有兴趣的可以上我的github ,欢迎fork~star~

canvas drag 实现拖拽拼图小游戏的更多相关文章

  1. 拼图 canvas分割 dom拖拽 pc 移动端

    参考:Canvas drag 实现拖拽拼图小游戏 参考的案例,不支持手机端.总结下实现过程中遇到的小坑. gitHub:https://github.com/WppFrontEnd/puzzle 大概 ...

  2. 使用NGUI实现拖拽功能(拼图小游戏)

    上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...

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

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

  4. 打造专属自己的html5拼图小游戏

    最近公司刚好有个活动是要做一版 html5的拼图小游戏,于是自己心血来潮,自己先实现了一把,也算是尝尝鲜了.下面就把大体的思路介绍一下,希望大家都可以做出一款属于自己的拼图小游戏,必须是更炫酷,更好玩 ...

  5. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  6. jQuery实现拼图小游戏

    小熊维尼拼图                                                                                    2017-07-23 ...

  7. jQuery拼图小游戏

    jQuery拼图小游戏 最后样式 核心代码部分 <script type="text/javascript" > $(function () { $("td& ...

  8. 在HTML页面中有jQuery实现实现拼图小游戏

    1.用jQuery实现拼图小游戏 2.首先获得td的点击事件.再进行交换位置 3.下面这种仅供参考 4.下面这些是HTMl标签 当这个世界变得越来越复杂的时候,内心最需保持一份简单一份纯真:

  9. atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结

    atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...

随机推荐

  1. WPF学习之路(五) 实例:写字板(续)

    WordPad 2.0 上一期实现了一虽然建议但是功能比较全面的Wordpad程序,但是程序代码略显繁琐,这一期更新改进版. MainWindows.xaml 添加 <Window.Comman ...

  2. substring -----截取字符串

    var str = "0123456789"; substring alert(str.substring(0));------------"0123456789&quo ...

  3. 网络编程4--毕向东java基础教程视频学习笔记

    Day24 06 自定义浏览器-Tomcat服务端07 自定义图形界面浏览器-Tomcat服务端08 URL-URLConnection09 小知识点10 域名解析 06 自定义浏览器-Tomcat服 ...

  4. JavaScript Patterns 5.7 Object Constants

    Principle Make variables shouldn't be changed stand out using all caps. Add constants as static prop ...

  5. python scrapy+Mongodb爬取蜻蜓FM,酷我及懒人听书

    1.初衷:想在网上批量下载点听书.脱口秀之类,资源匮乏,大家可以一试 2.技术:wireshark scrapy jsonMonogoDB 3.思路:wireshark分析移动APP返回的各种连接分类 ...

  6. A cost-effective recommender system for taxi drivers

    一个针对出租车司机有效花费的推荐系统 摘要 GPS技术和新形式的城市地理学改变了手机服务的形式.比如说,丰富的出租车GPS轨迹使得出做租车领域有新方法.事实上,最近很多工作是在使用出租车GPS轨迹数据 ...

  7. linux权限补充:rwt rwT rws rwS 特殊权限

    众所周知,Linux的文件权限如: 777:666等,其实只要在相应的文件上加上UID的权限,就可以用到加权限人的身份去运行这个文件.所以我们只需要将bash复制出来到另一个地方,然后用root加上U ...

  8. python setuptools工具打包

    http://blog.csdn.net/five3/article/details/7847551http://blog.csdn.net/reyoung1110/article/details/7 ...

  9. C语言中不同函数之间怎么传值?

    #include <stdio.h> int change(); int change(int j) { j=; return(j); } void main() { int b = ch ...

  10. C#语言数据总结

    整数类型 sbyte   -128~127之间 byte   0~255 short(Int16) -32768~32768 ushort(UInt16)  0~65535 Int (Int32)   ...