点击触发图片显示与切换问题求助:卡牌显示及翻面功能异常排查
记忆游戏卡牌翻转功能代码问题排查
嘿,我看了你写的flipCard函数代码,发现几个明显的问题,正好是阻碍你实现「显示卡牌图片」和「卡牌翻面显示正面」这两个功能的关键:
先把你贴出的代码完整呈现出来方便分析:
var flipCard = function(){ var cardId = this.getAttribute('data-id'); var cardOne = cards[0]; cardsInPlay.push(cards[0].rank); console.log("User flipped " + cards[0].rank); console.log(cards[0].cardImage); var cardTwo = cards[2]; cardsInPlay.push(cards[2].rank); console.log("User flipped " + ...
核心错误点:
- 拿到了点击卡牌的ID却完全没用到:你通过
this.getAttribute('data-id')获取了用户点击卡牌的标识,但后续直接硬编码用cards[0]和cards[2],这意味着不管用户点哪张卡,代码都只会操作第1张和第3张卡牌,完全和用户的实际操作脱节,根本实现不了「点哪张翻哪张」的效果。 - 单次点击处理两张卡牌,逻辑混乱:
flipCard应该是用户点击单张卡牌时触发的函数,每次只需要处理当前点击的那一张卡牌即可,但你现在直接在函数里硬塞了两张卡牌的操作,会导致每次点击都往cardsInPlay里添加两个rank,逻辑完全错误。 - 只打印图片地址,没有实际显示图片:你只是在控制台输出了卡牌图片的地址,但没有任何代码把这个图片应用到页面的卡牌元素上,自然看不到卡牌图片的显示和翻面效果。
修正后的核心逻辑示例:
var flipCard = function(){ // 获取当前点击卡牌的ID,拿到对应的卡牌数据 var cardId = this.getAttribute('data-id'); var currentCard = cards[cardId]; // 将卡牌正面图片应用到元素上,实现翻面显示正面的效果 this.style.backgroundImage = `url(${currentCard.cardImage})`; // 记录当前翻开卡牌的rank cardsInPlay.push(currentCard.rank); console.log("User flipped " + currentCard.rank); console.log(currentCard.cardImage); // 这里可以继续添加后续的匹配判断逻辑(比如两张卡牌是否相同) }
这样修改后,每次点击卡牌都会操作用户实际点击的那张,并且把正面图片设置到卡牌元素上,就能实现你想要的基础显示和翻面功能了。
内容的提问来源于stack exchange,提问作者Andrew BAO
相关产品推荐
相关产品推荐

