我已经写了一个Javascript代码来匹配4x4网格中的图像。当用户点击图片时,我希望图片翻转,当两张图片不一样时,图片会翻转。我可以在第一次点击时翻转图像。然后图像得到比较。如果平等,我会设置display: none
但是当它们不相等时,就会出现问题。我尝试了所有的排列和组合,但图像并没有翻转。请帮我把图像翻回来。如何翻转图像而不点击它?
这里是我的代码:
HTML:
<div class="container">
<div class="f1_container" onclick="choose(0)">
<div class="shadow f1_card">
<div class="back face center"><img src="A.png" onclick="Click()"></div>
</div>
</div>
<div class="f1_container" onclick="choose(1)">
<div class="shadow f1_card">
<div class="back face center"><img src="B.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(2)">
<div class="shadow f1_card">
<div class="back face center"><img src="C.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(3)">
<div class="shadow f1_card">
<div class="back face center"><img src="D.png"></div>
</div>
</div>
<br>
<div class="f1_container" onclick="choose(4)">
<div class="shadow f1_card">
<div class="back face center"><img src="E.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(5)">
<div class="shadow f1_card">
<div class="back face center"><img src="F.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(6)">
<div class="shadow f1_card">
<div class="back face center"><img src="G.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(7)">
<div class="shadow f1_card">
<div class="back face center"><img src="H.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(8)">
<div class="shadow f1_card">
<div class="back face center"><img src="A.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(9)">
<div class="shadow f1_card">
<div class="back face center"><img src="B.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(10)">
<div class="shadow f1_card">
<div class="back face center"><img src="C.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(11)">
<div class="shadow f1_card">
<div class="back face center"><img src="D.png"></div>
</div>
</div>
<br>
<div class="f1_container" onclick="choose(12)">
<div class="shadow f1_card">
<div class="back face center"><img src="E.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(13)">
<div class="shadow f1_card">
<div class="back face center"><img src="F.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(14)">
<div class="shadow f1_card">
<div class="back face center"><img src="G.png"></div>
</div>
</div>
<div class="f1_container" onclick="choose(15)">
<div class="shadow f1_card">
<div class="back face center"><img src="H.png"></div>
</div>
</div>
<br>
</div>
的Javascript:
<script>
var clicks = 0; //counts how may picks have been made in each turn
var firstchoice; //stores index of first card selected
var secondchoice; //stores index of second card selected
var match = 0; //counts matches made
var backcard = "images/card.png"; //shows back of card when turned over
var tiles_flipped = 0;
var faces = ['A.png', 'B.png', 'C.png', 'D.png', 'E.png', 'F.png','G.png', 'H.png', 'A.png', 'B.png', 'C.png', 'D.png', 'E.png', 'F.png','G.png', 'H.png'
/*'canada.png', 'germany.png', 'india.png', 'spain.png', 'uk.png', 'usa.png'*/]; //array to store card images
/*function shuffle(a)
{
for (let i = a.length; i; i--) {
let j = Math.floor(Math.random() * i);
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
shuffle(faces);*/
var count_clicks = 0;
function choose(card)
{
count_clicks += 1;
if (clicks == 2)
{
return;
}
if (clicks == 0)
{
firstchoice = card;
document.images[card].src = faces[card];
clicks = 1;
}else
{
clicks = 2;
secondchoice = card;
document.images[card].src = faces[card];
timer = setInterval("check()", 500);
}
}
/* Check to see if a match is made */
function check()
{
clearInterval(timer); //stop timer
clicks = 0;
if (faces[secondchoice] == faces[firstchoice])
{
match++;
document.images[firstchoice].style.display = 'none';
document.images[secondchoice].style.display = 'none';
document.getElementById("matches").innerHTML = match;
} else
{ // This is the part I have doubt in.
// I'v set it to an image but it should flip back.
document.images[firstchoice].src = backcard;
document.images[secondchoice].src = backcard;
return;
}
}
var clicks = 0;
var previous_scores = localStorage.getItem("old-score");
console.log(previous_scores);
function Click()
{
if(tiles_flipped == faces.length)
{
document.getElementById("clicks").innerHTML = "New Score: "+clicks+"<br>"+"Old Score: "+previous_scores;
localStorage.setItem("old-score", clicks);
}
else
{
clicks += 1;
document.getElementById("clicks").innerHTML = "Clicks: "+clicks;
return clicks;
}
}
console.log(count_clicks);
</script>
CSS:
body::after
{
content: "";
background: url(bg2.jpg);
background-size: cover;
opacity: 0.05;
top: 0;
left: 0;
bottom: 0;
right: 0;
position: absolute;
z-index: -1;
}
.container
{
width: 685px;
margin: 0 auto;
}
.f1_container {
position: relative;
margin:10px;
width: 150px;
height: 150px;
z-index : 1;
float:left;
}
.f1_container {
-webkit-perspective: 1000;
perspective: 1000;
}
.f1_card {
width: 150px;
height: 150px;
-webkit-transform-style: preserve-3d;
-webkit-transition: all 0.3s linear;
transform-style: preserve-3d;
transition: all 0.3s linear;
background: url('card.png');
background-size: 150px 150px;
}
.f1_container.active .f1_card {
-webkit-transform: rotateY(180deg);
transform: rotateY(180deg);
/* box-shadow: -5px 5px 5px #aaa; */
}
.face {
position: absolute;
width: 150px;
height: 150px;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
.face.back {
display: block;
-webkit-transform: rotateY(180deg);
transform: rotateY(180deg);
box-sizing: border-box;
text-align: center;
background-color: white;
}
.face.back img
{
width: 150px;
}
你可以添加一个类时,他们被翻转,那么,如果他们不匹配,它需要运行一些转型设定的时间后再次删除类。所以卡片会从正常状态转换到增加的状态;那么如果不匹配,则在删除类时从添加的类状态转换回正常状态。 – cjl750
感谢您的回复。它可以做到没有jQuery?此外,我得到了addClass和removeClass逻辑,但没有得到过渡部分.. –
@ cjl750是的请张贴它作为答案,因为它正在工作:) –