简体   繁体   English

为什么背景图不显示?

[英]Why isn't the background image showing?

I wanted to make a game where you have to turn cards in order to reveal the back, but I can't get the background image to show.我想制作一个游戏,你必须翻牌才能露出背面,但我无法显示背景图像。 I'm still new to vue so I don't know if I did something stupid.我还是 vue 的新手,所以我不知道我是否做了一些愚蠢的事情。 I think it has something to do with the fact that I add the background through a script.我认为这与我通过脚本添加背景有关。

This is the App.vue:这是 App.vue:

<template>
  <div class="griglia">
    <Card num="1" path="../assets/squalo.png" />
    <Card num="2" path="../assets/squalo.png" />
    <Card num="3" path="../assets/squalo.png" />
    <Card num="4" path="../assets/squalo.png" />
    <Card num="5" path="../assets/squalo.png" />
    <Card num="6" path="../assets/squalo.png" />
    <Card num="7" path="../assets/squalo.png" />
    <Card num="8" path="../assets/squalo.png" />
    <Card num="9" path="../assets/squalo.png" />
  </div>
</template>

<script>
import Card from "./components/Card.vue"

export default {
  name: 'App',

  components: {
    Card,
  },
};
</script>

<style>
* {
  box-sizing: border-box;
  user-select: none;
  margin: 0;
  padding: 0;
}

body {
  width: 100%;
  height: 100%;
  background-image: linear-gradient(#7c00e1, #4f009e);
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  color: white;
}

div.griglia {
  width: 30vw;
  height: 30vw;
  display: flex;
  justify-content: space-around;
  flex-wrap: wrap;
}
</style>

And this is the Card.vue component:这是 Card.vue 组件:

<template>
    <div class="el">
        <div class="card" :id="'el'+num" @click="flip">
            <div class="front">{{num}}</div>
            <div class="back" :id="'b'+num"></div>
        </div>
    </div>
</template>

<script>
export default {
    props: {
        num: String,
        path: String
    },
    methods: {
        flip() {
            document.getElementById("b" + this.num).style = 'background-image: url("' + this.path + '"); background-size: cover'
            document.getElementById("el" + this.num).style = "transform: rotateY(180deg);"
        }
    }
};
</script>

<style scoped>
div.el {
  width: 30%;
  height: 30%;
  cursor: pointer;
  position: relative;
}

div.card {
  box-shadow: 0 0 15px black;
  position: absolute;
  width: 100%;
  height: 100%;
  transform-style: preserve-3d;
  transition: all 0.3s ease;
}

div.front {
  position: absolute;
  background-color: #111111;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100%;
  font-family: Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif;
  font-size: 3.5vw;
  backface-visibility: hidden;
}

div.back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
  transform: rotateY(180deg);
  background-image: none;
}
</style>

The document.getElementById("b" + this.num).style = 'background-image: url("' + this.path + '"); document.getElementById("b" + this.num).style = 'background-image: url("' + this.path + '"); is incorrect.是不正确的。

This will produce typeerror .这将产生typeerror

Use document.getElementById("b" + this.num).style.backgroundImage = 'url("' + this.path + '")' instead.请改用document.getElementById("b" + this.num).style.backgroundImage = 'url("' + this.path + '")'

Check more here 在这里查看更多

I've been able to get it to show by changing the path like "squalo.png" and adding the png file in the final dist folder.我已经能够通过更改“squalo.png”之类的路径并在最终的 dist 文件夹中添加 png 文件来显示它。 Probably not the best way to do it but it works.可能不是最好的方法,但它确实有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM