- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一段 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;
}
最佳答案
我建议做的是通过类更改来控制翻转动画。在 CSS 中为卡片设置正常样式,然后在添加额外类时应用 transform:rotateY(180deg)
。
这样,您可以在单击卡片时添加该类,并在一定的超时后再次删除该类。只要您在卡上包含变换过渡(例如,transition:transform 500ms
),它就会双向过渡:当它在添加类时翻转时,以及当它像添加类一样翻转时该类已被删除。
您可以使用已有的点击功能和超时来添加和删除此类。
下面是使用带有超时功能的普通 JavaScript 添加和删除类的示例。了解如何使用 JavaScript 将 flipped
类添加到 #wrapper
,我们的样式为 #wrapper.flipped .card { transform:rotateY(180deg); }
用于动画。
请注意,此解决方案使用 element.classList
,它在 Internet Explorer 10+ 中受支持。如果您需要支持 Internet Explorer 9 或更低版本,请参阅Code with classList does not work in IE?一些选项。
document.getElementById('wrapper').addEventListener('click', function() {
var wrapper = this;
wrapper.classList.add('flipped');
setTimeout(function() {
wrapper.classList.remove('flipped');
}, 1500);
});
#wrapper {
perspective: 1000px;
width: 100px;
height: 150px;
}
#wrapper.flipped .card {
transform: rotateY(180deg);
}
.card {
width: 100%;
height: 100%;
position: relative;
transition: transform 500ms;
transform-style: preserve-3d;
}
.card .front,
.card .back {
width: 100%;
height: 100%;
border-radius: 15px;
position: absolute;
top: 0;
left: 0;
backface-visibility: hidden;
}
.card .front {
background-color: midnightblue;
z-index: 1;
}
.card .back {
background-color: firebrick;
transform: rotateY(180deg);
}
<div id="wrapper" style="float: left;">
<div class="card">
<div class="front"></div>
<div class="back"></div>
</div>
</div>
<p style="float: left; margin: 65px 0 0 10px;">← click me</p>
关于javascript - 如何在不点击图片的情况下将图片翻转回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45443496/
我是 Java 新手,这是我的代码, if( a.name == b.name && a.displayname == b.displayname && a.linknam
在下面的场景中,我有一个 bool 值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量。 var myBoolean = ... if (myBoolean) { retrieve
我是一名研究 C++ 的 C 开发人员: 我是否正确理解如果我抛出异常然后堆栈将展开直到找到第一个异常处理程序?是否可以在不展开的情况下在任何 throw 上打开调试器(即不离开声明它的范围或任何更高
在修复庞大代码库中的错误时,我观察到一个奇怪的情况,其中引用的动态类型从原始 Derived 类型更改为 Base 类型!我提供了最少的代码来解释问题: struct Base { // some
我正在尝试用 C# 扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。 使用 Visual Studio 社区,我尝试通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器的特定名称(即
这可能是一个哲学问题。 假设您正在向页面发出 AJAX 请求(这是使用 Prototype): new Ajax.Request('target.asp', { method:"post", pa
我有以下 HTML 代码,我无法在所有浏览器中正常工作: 我试图在移动到
我对 Swift 很陌生。我如何从 addPin 函数中检索注释并能够在我的 addLocation 操作 (buttonPressed) 中使用它。我正在尝试使用压力触摸在 map 上添加图钉,在两
我设置了一个详细 View ,我是否有几个 Nib 文件根据在 Root View Controller 的表中选择的项目来加载。 我发现,对于 Nibs 的类,永远不会调用 viewDidUnloa
我需要动态访问 json 文件并使用以下代码。在本例中,“bpicsel”和“temp”是变量。最终结果类似于“data[0].extit1” var title="data["+bpicsel+"]
我需要使用第三方 WCF 服务。我已经在我的证书存储中配置了所需的证书,但是在调用 WCF 服务时出现以下异常。 向 https://XXXX.com/AHSharedServices/Custome
在几个 SO 答案(1、2)中,建议如果存在冲突则不应触发 INSERT 触发器,ON CONFLICT DO NOTHING 在触发语句中。也许我理解错了,但在我的实验中似乎并非如此。 这是我的 S
如果进行修改,则会给出org.hibernate.NonUniqueObjectException。在我的 BidderBO 类(class)中 @Override @Transactional(pr
我使用 indexOf() 方法来精细地查找数组中的对象。 直到此刻我查了一些资料,发现代码应该无法正常工作。 我在reducer中尝试了上面的代码,它成功了 let tmp = state.find
假设我有以下表格: CREATE TABLE Game ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
代码: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
我是一名优秀的程序员,十分优秀!