拼图小游戏模块开发总结

封面

目录

  1. 成果展示
  2. 开发过程中考虑的问题
  3. 项目源码及使用方法

成果展示

最终实现成果

开发过程中考虑的问题

布局展示方面
  1. 如何创建屏幕自适应的正方形盒子
    自适应宽度:
    考虑到拼图游戏会被添加到不同宽度的盒子中,如直接引入到不同分辨率的手机中,或不同指定宽度的盒子中,在这里,我们使用width: 100%,来设置正方形容器的宽度,让容器的宽度完全等于外部元素的宽度(因为块级元素独占一行,继承父元素的宽度,因此可以不用设置)。
    正方形盒子:
    使用padding-top: 100%让容器成为一个正方形,因为padding设置为百分比时,也是根据父元素的宽度进行计算的,并且在计算盒子的大小时,是包括在内的,(更明显一点的行为为,background会影响padding但是不会影响border,margin)。
    但是此时并没有完成,此时如果在标签中添加元素的话,元素会布局到padding-top的下面,撑高我们的容器,并不能达到我们要的效果,因此需要在添加一个内层的盒子并且将这个盒子相对于外层容器决定定位到左上角,然后由容器中的内容来撑高。(在这里我通过脚本计算,根据当前外层盒子的宽度,计算每个小图片的宽度,然后完美撑高盒子,如果使用CSS来设置,则需要配合box-size: padding-box;)。
    具体实现:
CSS:
    #outer {
                /*设置相对定位*/
            position: relative;
        /*设置正方形*/
        /*width属性会继承,块级元素可以不用设置*/
        /*width: 100%;*/
        padding-top: 100%;
        background: rgb(250, 250, 0);
    }

    #inner {
        /*定位到左上角*/
        position: absolute;
        top: 0;
        left: 0;
    }

HTML: 
    <div id="outer">
        <div id="inner">Happy Everyday</div>
    </div>
正方形容器

知识点:
使用百分值设置盒模型(margin,border,padding,width,height)时,margin,padding,width都是相对于父元素的width,而height是相对于父元素的height(特殊:border的宽度为特定值,或者0)。

  1. 如何获取这个盒子的宽度
    计算样式:
    计算样式:指的是经过浏览器进行整体处理后的综合结果。
    在这里,可以通过js来获取这个值:
var style = document.defaultView.getComputedStyle(ele, null);
// 获取宽度
var width = parseInt(style.width);

注意点:
使用这个函数返回的是一个对当前这个元素所有计算样式的引用,因此如果你在保存这个引用之后重新修改了样式,其中的样式值也会随之改变。
还有一点是,这个计算样式对象的所有属性值都是字符串,如果我们需要获取数值类型的数据,需要进一步进行处理。

  1. 如何确定内部小方块的大小
    外层容器处理:
    让外层容器刚好可以被整除
    w_container(容器宽度) -= w_container % base(每行的方块个数) ;
    方块宽度计算公式(考虑到border):
    w_ceil(小方块宽度) = Math.floor(w_container(容器宽度) / base) - 2 * border
    注意点:
    在小方块的宽度+border总和实际上是小于外部容器的宽度,base值越大,差值越大,就会导致不居中的问题。解决方式:将中间层容器设置dispaly: inner-block; 然后最外层设置text-align: center;让容器居中。
    方块设置为:dispaly: inner-block;排列时会出现缝隙的问题,是由于inner-block具有行内元素的特性,换行会出现空白折叠现象,每个方块之间出现一个空白。解决方式:font-size: 0;即可。

  2. 图片的展示方式
    直接使用背景图片的方式,结合使用background-image, background-position, background-size来实现。
    注意点:
    图片的定位:background-position,是根据background-size的大小进行设置的,如果没有设置后者,则是根据实际大小来设置,但是如果设置了,则根据设置的大小进行定位。且定位的值都为负值。

图片处理逻辑

将图片切割成nn份,然后从左到右,从上到下,一起进行编号(0 ~nn-1),采用一个数组来存放当前图片的实际顺序(即方块中对应的图片索引)。

  1. 图片定位
    给定一个图片的位置,则:
    row:position / 3
    col: postion % 3
    最终位置为(左上角为(0, 0)):
    x = col * w_ceil(方块宽度)
    y = row * w_ceil(方块宽度)

  2. 图片打乱
    每次上述数组中的两个点,然后互换这两个点中的内容,重复多次这样的操作。

  3. 拼图检测
    如果数组中对应元素和索引值相等,则此时图片即在正确的位置上。

其他方面
  1. 页面结构和基础样式,只在初始化是进行一次处理,重新开始游戏时,只图片不会对整个拼图模块进行重新布局。

  2. DOM引用本地化:在脚本运行时,便对需要使用的页面元素进行本地化,减少DOM操作。

  3. 实现了封装,将所有将页面结构,样式,处理逻辑都封装在内部,只对提供了一些api以及可配置项,只需要引入一个js文件,调用相应api,即可实现一个拼图游戏

项目源码及使用方法

github线上地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,815评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,251评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,999评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,996评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,993评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,477评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,848评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,823评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,361评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,401评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,518评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,119评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,850评论 3 338
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,292评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,424评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,072评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,588评论 2 365

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,770评论 1 92
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,322评论 0 11
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,773评论 0 2
  • 转载请声明 原文链接地址 关注公众号获取更多资讯 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位...
    前端进阶之旅阅读 16,566评论 32 459
  • 学习CSS的最佳网站没有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_阅读 1,071评论 0 1