html5自学日记,郑方方打怪升级日记 — 初识HTML5与CSS3

任务名称:响应式砸蛋页面

任务背景

前辈:方方啊,最近项目也没什么事情,你看这个砸蛋页面不是很好看,要不你做一个响应式砸蛋页面吧?

系统:郑方方接下前辈的任务 - 郑方方自动解析任务步骤

任务:响应式砸蛋页面

HTML5与CSS3入门 - 阅读《HTML5秘籍》(0/1)

响应式布局(0/1)

制作Canvas层(0/1)

搭配Javascript(0/1)

搭配PHP控制器 (0/1)

完成任务(0/1)

人物背景介绍:郑方方

主职:小白PHP码畜;副职:Acer

技能:吃饭、睡觉

特征:单身狗

学习正文和代码

响应式布局 Begin

因为我不是前端,所以使用Bootstrap的visible-xs和hidden-xs,对于一些特殊的要求就是用 @media 来进行调节.

我使用的是不知道从哪里介绍的几种尺寸范围,如下:

@media (min-width: 970.1px) and (max-width: 1170px)

@media (min-width: 700.1px) and (max-width: 970px)

@media (min-width: 600px) and (max-width: 700px)

@media (min-width: 400px) and (max-width: 599.99px)

@media (max-width: 399.99px)

对于页面布局,我借助了 http://www.ibootstrap.cn/ 这个网站,之后再把代码下载下来自己进行修改.

Tip:垂直居中(主要是用于蛋一直在页面中间)

position: absolute;

margin: auto;

top: 0; left: 0; bottom: 0; right: 0;

响应式布局(1/1)Over

制作Canvas层 Begin

制作Canvas层时我把动画分为三个

EggCanvas - 蛋(无其他CSS3效果)

HammerCanvas - 锤子(animation、rotate):锤子砸下去后锤子会复位

BoomCanvas - 爆炸特效(animation、transform、opacity):Ajax查询后爆炸变大并消失

Tip:为了让这些效果能兼容更多浏览器,我要这几个效果就会像下面代码,比如我的锤子效果

.AniHammer {

animation: AniHammer 0.5s;

-moz-animation: AniHammer 0.5s; /* Firefox */

-webkit-animation: AniHammer 0.5s; /* Safari and Chrome */

-o-animation: AniHammer 0.5s; /* Opera */

}

@keyframes AniHammer {

/*25% {*/

/*transform: rotate(45deg);*/

/*}*/

50% {

transform: rotate(-135deg);

}

100% {

transform: rotate(0deg);

}

}

@-moz-keyframes AniHammer /* Firefox */

{

/*25% {*/

/*-moz-transform: rotate(45deg);*/

/*}*/

50% {

-moz-transform: rotate(-135deg);

}

100% {

-moz-transform: rotate(0deg);

}

}

@-webkit-keyframes AniHammer /* Safari and Chrome */

{

/*25% {*/

/*-webkit-transform: rotate(45deg);*/

/*}*/

50% {

-webkit-transform: rotate(-135deg);

}

100% {

-webkit-transform: rotate(0deg);

}

}

@-o-keyframes AniHammer /* Opera */

{

/*25% {*/

/*-o-transform: rotate(45deg);*/

/*}*/

50% {

-o-transform: rotate(-135deg);

}

100% {

-o-transform: rotate(0deg);

}

}

这一段样式就是在0.5秒内,把动画效果分两步,第一步旋转到-135度,第二步就是旋转回0度.其中的-o-,-webkit-,-moz-就是为了兼容.

搭配Javascript Begin

我不知道刚接触的人会怎么想Javascript 和 CSS3 的关系,我最开始的时候还以为JS能控制CSS3的动画行为呢,现在我感觉JS只能通过控制元素的Class的attr( )或者removeclass( ),来完成我们想要的CSS3的一系列动画行为. (可能我现在还理解不够深,有谁理解的,麻烦给我科普科普)

移动端和PC端分别对应两个事件:Touch事件和Click事件,Touch事件如下:

var EggTouch = function (){console.log('Hi')};

document.getElementById("LuckEgg").addEventListener('touchstart', EggTouch, false);

但是Canvas层产生的图片,了解过的人都知道需要用JS去生成图像

// 1.加载蛋的图片

var EggCanvas = document.getElementById("LuckEgg");

var EggContext = EggCanvas.getContext("2d");

var EggImg = new Image();

EggImg.src = "./egg.png";

// 特别注意 - 要图片加载完才会出现图片

EggImg.onload = function () {

// 还要在这里判断屏幕大小 --- 用于确定生成的蛋的位置和大小

EggContext.drawImage(EggImg, 30, 20, 240, 120);

};

Tip:

每一次JS控制带有自动执行的动画效果的元素,使其display:block,就会自动执行动画效果;

使用setTimeout( )来完成某些效果,比如我的Boom效果爆炸持续时间是0.5秒,那么我就要在Boom后0.5秒再去执行其他函数.,这样就能得到我们想要的效果.

制作Canvas层(1/1)Over

搭配Javascript(1/1)Over

搭配PHP控制器 Begin

如果你们跟我一样同时使用了Touch和Click这两个事件,那么可能会出现在浏览器测试的时候,鼠标点击模拟手机状态下的touch行为,就会有两次POST传到后台,这就可能出现客户投诉说:我砸蛋砸了一次,怎么次数就没了.之类的话语.所以在后台我会用redis做一个很简单的锁,防止上面的情况的发生.

/** 防止touch 和 click 同时触发 */

self::$lock .= $user['uid'];

self::$luckValue = \Common\Common\MyRedis::getInstance()->get(self::$lock);

if (self::$luckValue && time() - self::$luckValue <= 1) {

exit;

} else {

\Common\Common\MyRedis::getInstance()->set(self::$lock, time(), 2);

}

搭配PHP控制器 (1/1)

完成任务(1/1)

到此,任务也就做完了,其中一些比如什么字体大小,怎么查数据库,怎么控制JS的一些业务细节我就不多说了.

毕竟我也只是第一次写博客,文中有什么错误,或者思路有问题,还希望各位看客能指点指点.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值