如何利用纯CSS实现拼图游戏
这篇文章主要讲解了“如何利用纯CSS实现拼图游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用纯CSS实现拼图游戏”吧!
创新互联主营海曙网站建设的网络公司,主营网站建设方案,APP应用开发,海曙h5重庆小程序开发搭建,海曙网站营销推广欢迎海曙等地区企业咨询
我们要做的,就是将散落的图片碎块,复原成一幅完整的图,像是这样:
注意,这是完全由 CSS 实现的,我们拆解一下核心的难点:
如何让一个元素变得可以拖拽?
如何让一个元素从一个固定的位置通过拖拽,停留在另外一个位置?
最难的是,基于(2),拖拽元素后释放,只有释放在特定的位置,元素才会固定到新位置,否则,返回到原先的位置
利用 draggable 属性实现元素的拖拽
基于上述第一点,如何让一个元素变得可以拖拽,这是最容易解决的。
在 HTML5 中,给标签新增了一个 draggable
属性,设置为 true
后,即可实现元素的拖拽效果。
简单而言:
draggable false
draggable true
我们实现这样两个 div,其中第二个设置了 draggable="true"
:
设置了 draggable="true"
的元素,长按住鼠标即可拖动元素:
这样,拖动的问题就解决了。
实现元素从位置A到位置B的移动
OK,接下来的难点就在于,如何将元素从位置A移动到位置B。
这里的核心在于,巧妙的应用 transition
元素。
我们来看这样一个例子,如果有一个元素,已经偏移了 translate(120px, 120px)
,我们 hover 这个元素的时候,让它回到原来的位置:
div {
transform: translate(120px, 120px);
}
div:hover {
transform: translate(0, 0);
}
效果如下:
这里很有意思的是:
当我们 hover 元素,元素归位
由于元素归位,失去了 hover 的状态,又变回了原来状态,然后又重新触发了 hover 状态,如此反复,所以会看到剧烈的跳动
那,有没有办法让它复位了就不再跳回来呢?
可以的,我们可以通过设置一个非常大的 transition-duraiotn
和一个非常大的 transition-delay
,让整个过渡效果变得非常缓慢,慢到我们察觉不到:
div {
transform: translate(120px, 120px);
transition: 999999s 999999s;
}
div:hover {
transform: translate(0, 0);
transition: 0s;
}
如此一来,元素复位了之后,就再也不会跳回来了(理论上):
如果,我们把上述的 transition: 999999s 999999s
,也就过渡持续时间与过渡延迟时间**设置短一点,譬如都设置为 2s 的话 transition: 2s 2s
,效果如下:
这样,你应该能大致理解发生了什么了。
通过 :active 伪类实现触发器
当然,只有上面的知识还是不够。
首先,元素的移动不是通过 hover 触发的,而是需要通过拖到到特定位置,并且释放鼠标的拖动效果,实现元素的移动。并且,只有在特定的位置释放,元素才能移动。
这又是怎么实现的呢?这里,我们还需要通过事件的冒泡。
我们简单改造一下代码,给元素添加一个父元素,再添加一个标记元素:
FLAG