Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
黛琳ghz
2048
提交
f18f7cee
2048
项目概览
黛琳ghz
/
2048
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
2048
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
f18f7cee
编写于
3月 09, 2014
作者:
G
Gabriele Cirulli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add score and endgame
上级
53e08722
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
271 addition
and
54 deletion
+271
-54
index.html
index.html
+4
-1
js/game_manager.js
js/game_manager.js
+51
-1
js/html_actuator.js
js/html_actuator.js
+18
-2
style/main.css
style/main.css
+111
-41
style/main.scss
style/main.scss
+87
-9
未找到文件。
index.html
浏览文件 @
f18f7cee
...
@@ -15,7 +15,10 @@
...
@@ -15,7 +15,10 @@
</head>
</head>
<body>
<body>
<div
class=
"container"
>
<div
class=
"container"
>
<h1>
2048
</h1>
<div
class=
"heading"
>
<h1
class=
"title"
>
2048
</h1>
<div
class=
"score-container"
>
0
</div>
</div>
<p
class=
"game-intro"
>
Join the numbers and get to the
<strong>
2048 tile!
</strong></p>
<p
class=
"game-intro"
>
Join the numbers and get to the
<strong>
2048 tile!
</strong></p>
<div
class=
"game-container"
>
<div
class=
"game-container"
>
...
...
js/game_manager.js
浏览文件 @
f18f7cee
...
@@ -6,6 +6,9 @@ function GameManager(size, InputManager, Actuator) {
...
@@ -6,6 +6,9 @@ function GameManager(size, InputManager, Actuator) {
this
.
startTiles
=
2
;
this
.
startTiles
=
2
;
this
.
grid
=
new
Grid
(
this
.
size
);
this
.
grid
=
new
Grid
(
this
.
size
);
this
.
score
=
0
;
this
.
over
=
false
;
this
.
inputManager
.
on
(
"
move
"
,
this
.
move
.
bind
(
this
));
this
.
inputManager
.
on
(
"
move
"
,
this
.
move
.
bind
(
this
));
this
.
setup
();
this
.
setup
();
...
@@ -38,7 +41,10 @@ GameManager.prototype.addRandomTile = function () {
...
@@ -38,7 +41,10 @@ GameManager.prototype.addRandomTile = function () {
// Sends the updated grid to the actuator
// Sends the updated grid to the actuator
GameManager
.
prototype
.
actuate
=
function
()
{
GameManager
.
prototype
.
actuate
=
function
()
{
this
.
actuator
.
actuate
(
this
.
grid
);
this
.
actuator
.
actuate
(
this
.
grid
,
{
score
:
this
.
score
,
over
:
this
.
over
});
};
};
// Save all tile positions and remove merger info
// Save all tile positions and remove merger info
...
@@ -63,6 +69,8 @@ GameManager.prototype.move = function (direction) {
...
@@ -63,6 +69,8 @@ GameManager.prototype.move = function (direction) {
// 0: up, 1: right, 2:down, 3: left
// 0: up, 1: right, 2:down, 3: left
var
self
=
this
;
var
self
=
this
;
if
(
this
.
over
)
return
;
// Don't do anything if the game's over
var
cell
,
tile
;
var
cell
,
tile
;
var
vector
=
this
.
getVector
(
direction
);
var
vector
=
this
.
getVector
(
direction
);
...
@@ -92,6 +100,9 @@ GameManager.prototype.move = function (direction) {
...
@@ -92,6 +100,9 @@ GameManager.prototype.move = function (direction) {
// Converge the two tiles' positions
// Converge the two tiles' positions
tile
.
updatePosition
(
positions
.
next
);
tile
.
updatePosition
(
positions
.
next
);
// Update the score
self
.
score
+=
merged
.
value
;
}
else
{
}
else
{
self
.
moveTile
(
tile
,
positions
.
farthest
);
self
.
moveTile
(
tile
,
positions
.
farthest
);
}
}
...
@@ -103,6 +114,11 @@ GameManager.prototype.move = function (direction) {
...
@@ -103,6 +114,11 @@ GameManager.prototype.move = function (direction) {
if
(
moved
)
{
if
(
moved
)
{
this
.
addRandomTile
();
this
.
addRandomTile
();
if
(
!
this
.
movesAvailable
())
{
this
.
over
=
true
;
// Game over!
}
this
.
actuate
();
this
.
actuate
();
}
}
};
};
...
@@ -151,3 +167,37 @@ GameManager.prototype.findFarthestPosition = function (cell, vector) {
...
@@ -151,3 +167,37 @@ GameManager.prototype.findFarthestPosition = function (cell, vector) {
next
:
cell
// Used to check if a merge is required
next
:
cell
// Used to check if a merge is required
};
};
};
};
GameManager
.
prototype
.
movesAvailable
=
function
()
{
return
this
.
grid
.
cellsAvailable
()
||
this
.
tileMatchesAvailable
();
};
// Check for available matches between tiles (more expensive check)
GameManager
.
prototype
.
tileMatchesAvailable
=
function
()
{
var
self
=
this
;
var
tile
;
for
(
var
x
=
0
;
x
<
this
.
size
;
x
++
)
{
for
(
var
y
=
0
;
y
<
this
.
size
;
y
++
)
{
tile
=
this
.
grid
.
cellContent
({
x
:
x
,
y
:
y
});
if
(
tile
)
{
for
(
var
direction
=
0
;
direction
<
4
;
direction
++
)
{
var
vector
=
self
.
getVector
(
direction
);
var
cell
=
{
x
:
x
+
vector
.
x
,
y
:
y
+
vector
.
y
};
var
other
=
self
.
grid
.
cellContent
(
cell
);
if
(
other
)
{
}
if
(
other
&&
other
.
value
===
tile
.
value
)
{
return
true
;
// These two tiles can be merged
}
}
}
}
}
return
false
;
};
js/html_actuator.js
浏览文件 @
f18f7cee
function
HTMLActuator
()
{
function
HTMLActuator
()
{
this
.
tileContainer
=
document
.
getElementsByClassName
(
"
tile-container
"
)[
0
];
this
.
tileContainer
=
document
.
getElementsByClassName
(
"
tile-container
"
)[
0
];
this
.
gameContainer
=
document
.
getElementsByClassName
(
"
game-container
"
)[
0
];
this
.
scoreContainer
=
document
.
getElementsByClassName
(
"
score-container
"
)[
0
];
}
}
HTMLActuator
.
prototype
.
actuate
=
function
(
grid
)
{
HTMLActuator
.
prototype
.
actuate
=
function
(
grid
,
metadata
)
{
var
self
=
this
;
var
self
=
this
;
window
.
requestAnimationFrame
(
function
()
{
window
.
requestAnimationFrame
(
function
()
{
...
@@ -15,6 +17,12 @@ HTMLActuator.prototype.actuate = function (grid) {
...
@@ -15,6 +17,12 @@ HTMLActuator.prototype.actuate = function (grid) {
}
}
});
});
});
});
self
.
updateScore
(
metadata
.
score
);
if
(
metadata
.
over
)
{
self
.
gameOver
();
}
});
});
};
};
...
@@ -59,3 +67,11 @@ HTMLActuator.prototype.positionClass = function (position) {
...
@@ -59,3 +67,11 @@ HTMLActuator.prototype.positionClass = function (position) {
position
=
this
.
normalizePosition
(
position
);
position
=
this
.
normalizePosition
(
position
);
return
"
tile-position-
"
+
position
.
x
+
"
-
"
+
position
.
y
;
return
"
tile-position-
"
+
position
.
x
+
"
-
"
+
position
.
y
;
};
};
HTMLActuator
.
prototype
.
updateScore
=
function
(
score
)
{
this
.
scoreContainer
.
textContent
=
score
;
};
HTMLActuator
.
prototype
.
gameOver
=
function
()
{
this
.
gameContainer
.
classList
.
add
(
"
game-over
"
);
};
style/main.css
浏览文件 @
f18f7cee
...
@@ -10,10 +10,41 @@ html, body {
...
@@ -10,10 +10,41 @@ html, body {
body
{
body
{
margin
:
80px
0
;
}
margin
:
80px
0
;
}
h1
{
.heading
:after
{
content
:
""
;
display
:
block
;
clear
:
both
;
}
h1
.title
{
font-size
:
80px
;
font-size
:
80px
;
font-weight
:
bold
;
font-weight
:
bold
;
margin
:
0
;
}
margin
:
0
;
display
:
block
;
float
:
left
;
}
.score-container
{
position
:
relative
;
float
:
right
;
background
:
#bbada0
;
padding
:
15px
30px
;
font-size
:
25px
;
height
:
25px
;
line-height
:
47px
;
font-weight
:
bold
;
border-radius
:
3px
;
color
:
white
;
margin-top
:
8px
;
}
.score-container
:after
{
position
:
absolute
;
width
:
100%
;
top
:
10px
;
left
:
0
;
content
:
"Score"
;
text-transform
:
uppercase
;
font-size
:
13px
;
line-height
:
13px
;
text-align
:
center
;
color
:
#eee4da
;
}
p
{
p
{
margin-top
:
0
;
margin-top
:
0
;
...
@@ -38,6 +69,27 @@ hr {
...
@@ -38,6 +69,27 @@ hr {
width
:
500px
;
width
:
500px
;
margin
:
0
auto
;
}
margin
:
0
auto
;
}
@-webkit-keyframes
fade-in
{
0
%
{
opacity
:
0
;
}
100
%
{
opacity
:
1
;
}
}
@-moz-keyframes
fade-in
{
0
%
{
opacity
:
0
;
}
100
%
{
opacity
:
1
;
}
}
@keyframes
fade-in
{
0
%
{
opacity
:
0
;
}
100
%
{
opacity
:
1
;
}
}
.game-container
{
.game-container
{
margin-top
:
40px
;
margin-top
:
40px
;
position
:
relative
;
position
:
relative
;
...
@@ -51,6 +103,25 @@ hr {
...
@@ -51,6 +103,25 @@ hr {
width
:
500px
;
width
:
500px
;
height
:
500px
;
height
:
500px
;
box-sizing
:
border-box
;
}
box-sizing
:
border-box
;
}
.game-container.game-over
:after
{
position
:
absolute
;
top
:
0
;
right
:
0
;
bottom
:
0
;
left
:
0
;
content
:
"Game over!"
;
display
:
block
;
background
:
rgba
(
238
,
228
,
218
,
0.5
);
text-align
:
center
;
height
:
500px
;
line-height
:
500px
;
z-index
:
100
;
font-size
:
60px
;
font-weight
:
bold
;
-webkit-animation
:
fade-in
800ms
ease
1200ms
;
-moz-animation
:
fade-in
800ms
ease
1200ms
;
-webkit-animation-fill-mode
:
both
;
-moz-animation-fill-mode
:
both
;
}
.grid-container
{
.grid-container
{
position
:
absolute
;
position
:
absolute
;
...
@@ -160,78 +231,74 @@ hr {
...
@@ -160,78 +231,74 @@ hr {
top
:
364px
;
}
top
:
364px
;
}
.tile.tile-2
{
.tile.tile-2
{
background
:
#eee4da
;
background
:
#eee4da
;
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0
);
}
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0
)
,
inset
0
0
0
1px
rgba
(
255
,
255
,
255
,
0
)
;
}
.tile.tile-4
{
.tile.tile-4
{
background
:
#ede0c8
;
background
:
#ede0c8
;
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0
);
}
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0
)
,
inset
0
0
0
1px
rgba
(
255
,
255
,
255
,
0
)
;
}
.tile.tile-8
{
.tile.tile-8
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#f2b179
;
background
:
#f2b179
;
}
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0
);
}
.tile.tile-16
{
.tile.tile-16
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#f59563
;
background
:
#f59563
;
}
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0
);
}
.tile.tile-32
{
.tile.tile-32
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#f67c5f
;
background
:
#f67c5f
;
}
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.07937
);
}
.tile.tile-64
{
.tile.tile-64
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#f65e3b
;
background
:
#f65e3b
;
}
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.15873
);
}
.tile.tile-128
{
.tile.tile-128
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#edcf72
;
background
:
#edcf72
;
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.2381
);
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.2381
)
,
inset
0
0
0
1px
rgba
(
255
,
255
,
255
,
0.14286
)
;
font-size
:
45px
;
}
font-size
:
45px
;
}
.tile.tile-256
{
.tile.tile-256
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#edcc61
;
background
:
#edcc61
;
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.31746
);
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.31746
)
,
inset
0
0
0
1px
rgba
(
255
,
255
,
255
,
0.19048
)
;
font-size
:
45px
;
}
font-size
:
45px
;
}
.tile.tile-512
{
.tile.tile-512
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#edc850
;
background
:
#edc850
;
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.39683
);
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.39683
)
,
inset
0
0
0
1px
rgba
(
255
,
255
,
255
,
0.2381
)
;
font-size
:
45px
;
}
font-size
:
45px
;
}
.tile.tile-1024
{
.tile.tile-1024
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#edc53f
;
background
:
#edc53f
;
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.47619
);
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.47619
)
,
inset
0
0
0
1px
rgba
(
255
,
255
,
255
,
0.28571
)
;
font-size
:
35px
;
}
font-size
:
35px
;
}
.tile.tile-2048
{
.tile.tile-2048
{
color
:
#f9f6f2
;
color
:
#f9f6f2
;
background
:
#edc22e
;
background
:
#edc22e
;
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.55556
);
box-shadow
:
0
0
30px
10px
rgba
(
243
,
215
,
116
,
0.55556
)
,
inset
0
0
0
1px
rgba
(
255
,
255
,
255
,
0.33333
)
;
font-size
:
35px
;
}
font-size
:
35px
;
}
@-webkit-keyframes
appear
{
@-webkit-keyframes
appear
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
1.5
)
;
opacity
:
0
;
opacity
:
0
;
}
-webkit-transform
:
scale
(
0
)
;
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
)
;
opacity
:
1
;
opacity
:
1
;
}
}
-webkit-transform
:
scale
(
1
)
;
}
}
@-moz-keyframes
appear
{
@-moz-keyframes
appear
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
1.5
)
;
opacity
:
0
;
opacity
:
0
;
}
-webkit-transform
:
scale
(
0
)
;
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
)
;
opacity
:
1
;
opacity
:
1
;
}
}
-webkit-transform
:
scale
(
1
)
;
}
}
@keyframes
appear
{
@keyframes
appear
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
1.5
)
;
opacity
:
0
;
opacity
:
0
;
}
-webkit-transform
:
scale
(
0
)
;
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
)
;
opacity
:
1
;
opacity
:
1
;
}
}
-webkit-transform
:
scale
(
1
)
;
}
}
.tile-new
{
.tile-new
{
-webkit-animation
:
appear
200ms
ease
100ms
;
-webkit-animation
:
appear
200ms
ease
100ms
;
...
@@ -241,30 +308,33 @@ hr {
...
@@ -241,30 +308,33 @@ hr {
@-webkit-keyframes
pop
{
@-webkit-keyframes
pop
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
0.5
);
-webkit-transform
:
scale
(
0
);
}
opacity
:
0
;
}
50
%
{
-webkit-transform
:
scale
(
1.2
);
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
);
-webkit-transform
:
scale
(
1
);
}
}
opacity
:
1
;
}
}
@-moz-keyframes
pop
{
@-moz-keyframes
pop
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
0.5
);
-webkit-transform
:
scale
(
0
);
}
opacity
:
0
;
}
50
%
{
-webkit-transform
:
scale
(
1.2
);
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
);
-webkit-transform
:
scale
(
1
);
}
}
opacity
:
1
;
}
}
@keyframes
pop
{
@keyframes
pop
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
0.5
);
-webkit-transform
:
scale
(
0
);
}
opacity
:
0
;
}
50
%
{
-webkit-transform
:
scale
(
1.2
);
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
);
-webkit-transform
:
scale
(
1
);
}
}
opacity
:
1
;
}
}
.tile-merged
{
.tile-merged
{
z-index
:
20
;
z-index
:
20
;
...
...
style/main.scss
浏览文件 @
f18f7cee
...
@@ -14,6 +14,8 @@ $tile-color: #eee4da;
...
@@ -14,6 +14,8 @@ $tile-color: #eee4da;
$tile-gold-color
:
#edc22e
;
$tile-gold-color
:
#edc22e
;
$tile-gold-glow-color
:
lighten
(
$tile-gold-color
,
15%
);
$tile-gold-glow-color
:
lighten
(
$tile-gold-color
,
15%
);
$game-container-background
:
#bbada0
;
$transition-speed
:
100ms
;
$transition-speed
:
100ms
;
html
,
body
{
html
,
body
{
...
@@ -30,10 +32,47 @@ body {
...
@@ -30,10 +32,47 @@ body {
margin
:
80px
0
;
margin
:
80px
0
;
}
}
h1
{
.heading
:after
{
content
:
""
;
display
:
block
;
clear
:
both
;
}
h1
.title
{
font-size
:
80px
;
font-size
:
80px
;
font-weight
:
bold
;
font-weight
:
bold
;
margin
:
0
;
margin
:
0
;
display
:
block
;
float
:
left
;
}
.score-container
{
$height
:
25px
;
position
:
relative
;
float
:
right
;
background
:
$game-container-background
;
padding
:
15px
30px
;
font-size
:
$height
;
height
:
$height
;
line-height
:
$height
+
22px
;
font-weight
:
bold
;
border-radius
:
3px
;
color
:
white
;
margin-top
:
8px
;
&
:after
{
position
:
absolute
;
width
:
100%
;
top
:
10px
;
left
:
0
;
content
:
"Score"
;
text-transform
:
uppercase
;
font-size
:
13px
;
line-height
:
13px
;
text-align
:
center
;
color
:
$tile-color
;
}
}
}
p
{
p
{
...
@@ -66,6 +105,16 @@ hr {
...
@@ -66,6 +105,16 @@ hr {
margin
:
0
auto
;
margin
:
0
auto
;
}
}
@include
keyframes
(
fade-in
)
{
0
%
{
opacity
:
0
;
}
100
%
{
opacity
:
1
;
}
}
.game-container
{
.game-container
{
margin-top
:
40px
;
margin-top
:
40px
;
position
:
relative
;
position
:
relative
;
...
@@ -76,11 +125,31 @@ hr {
...
@@ -76,11 +125,31 @@ hr {
-webkit-user-select
:
none
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-moz-user-select
:
none
;
background
:
#bbada0
;
background
:
$game-container-background
;
border-radius
:
$tile-border-radius
*
2
;
border-radius
:
$tile-border-radius
*
2
;
width
:
$field-width
;
width
:
$field-width
;
height
:
$field-width
;
height
:
$field-width
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
&
.game-over
:after
{
position
:
absolute
;
top
:
0
;
right
:
0
;
bottom
:
0
;
left
:
0
;
content
:
"Game over!"
;
display
:
block
;
background
:
rgba
(
$tile-color
,
.5
);
text-align
:
center
;
height
:
$field-width
;
line-height
:
$field-width
;
z-index
:
100
;
font-size
:
60px
;
font-weight
:
bold
;
@include
animation
(
fade-in
800ms
ease
$transition-speed
*
12
);
@include
animation-fill-mode
(
both
);
}
}
}
.grid-container
{
.grid-container
{
...
@@ -193,8 +262,11 @@ hr {
...
@@ -193,8 +262,11 @@ hr {
// Add glow
// Add glow
$glow-opacity
:
max
(
$exponent
-
4
,
0
)
/
(
$limit
-
4
);
$glow-opacity
:
max
(
$exponent
-
4
,
0
)
/
(
$limit
-
4
);
box-shadow
:
0
0
30px
10px
rgba
(
$tile-gold-glow-color
,
$glow-opacity
/
1
.8
);
//,
// inset 0 0 0 1px rgba(white, $glow-opacity / 3);
@if
not
$special-background
{
box-shadow
:
0
0
30px
10px
rgba
(
$tile-gold-glow-color
,
$glow-opacity
/
1
.8
)
,
inset
0
0
0
1px
rgba
(
white
,
$glow-opacity
/
3
);
}
// Adjust font size for bigger numbers
// Adjust font size for bigger numbers
@if
$power
>=
100
and
$power
<
1000
{
@if
$power
>=
100
and
$power
<
1000
{
...
@@ -210,13 +282,15 @@ hr {
...
@@ -210,13 +282,15 @@ hr {
@include
keyframes
(
appear
)
{
@include
keyframes
(
appear
)
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
1
.5
);
//
-webkit-transform: scale(1.5);
opacity
:
0
;
opacity
:
0
;
-webkit-transform
:
scale
(
0
);
}
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
);
//
-webkit-transform: scale(1);
opacity
:
1
;
opacity
:
1
;
-webkit-transform
:
scale
(
1
);
}
}
}
}
...
@@ -227,13 +301,17 @@ hr {
...
@@ -227,13 +301,17 @@ hr {
@include
keyframes
(
pop
)
{
@include
keyframes
(
pop
)
{
0
%
{
0
%
{
-webkit-transform
:
scale
(
.5
);
-webkit-transform
:
scale
(
0
);
opacity
:
0
;
// opacity: 0;
}
50
%
{
-webkit-transform
:
scale
(
1
.2
);
}
}
100
%
{
100
%
{
-webkit-transform
:
scale
(
1
);
-webkit-transform
:
scale
(
1
);
opacity
:
1
;
//
opacity: 1;
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录