1. 程式人生 > 其它 >vue中使用require動態拼接img路徑

vue中使用require動態拼接img路徑

一般情況下,我們在使用require存放一個圖片地址時,都是這麼寫:

<img width="100%; height: 100%" :src="bannarsrc" />


<script>
    data () {
        return {
            bannarsrc: require('@/assets/images/bannar-small.png')
        }
    }
</script>

然後當適配不同的裝置時直接對這個地址進行賦值即可

changeBannarImage() {
  const phone = 414; //
手機 const ipad = 768; //ipad //const ipadpro = 1024 //ipadpro if (document.body.clientWidth <= phone) { this.bannarsrc = require("@/assets/images/bannar-small.png"); } else if ( document.body.clientWidth >= phone && document.body.clientWidth <= ipad ) { this.bannarsrc = require("@/assets/images/bannar.png"); }
else { this.bannarsrc = require("@/assets/images/bannar-big.png"); } }
mounted() {
  this.changeBannarImage();
  window.onresize = () => {
    this.changeBannarImage();
  };
}

但是當一次性要替換的圖片過多時,比如給選單這種很多圖片進行賦值,那顯然一個個的去寫賦值肯定不行,於是可以使用for迴圈去賦值,但是由於require不能對變數進行賦值,於是要使用拼接的方式,這裡我建立一箇中間變數用來表示圖片名稱。

data結構如下

<script>
export default {
  data() {
    return {
      menuList: [
        {
          menuName: "公司章程",
          messageCount: "",
          menuMethod: "articles",
          src: "",
        },
        {
          menuName: "訊息通知",
          messageCount: 13,
          menuMethod: "message",
          src: "",
        },
        { menuName: "待辦中心", messageCount: 9, menuMethod: "dealt", src: "" },
        { menuName: "新聞中心", messageCount: "", menuMethod: "news", src: "" },
        {
          menuName: "知識平臺",
          messageCount: "",
          menuMethod: "knowledge",
          src: "",
        },
        { menuName: "計劃任務", messageCount: 9, menuMethod: "plan", src: "" },
        {
          menuName: "排班",
          messageCount: "",
          menuMethod: "scheduling",
          src: "",
        },
        { menuName: "申請", messageCount: "", menuMethod: "apply", src: "" },
        {
          menuName: "考勤&行政",
          messageCount: "",
          menuMethod: "attendance",
          src: "",
        },
      ],
      menuSrc: [
        "article{0}.png",
        "message{0}.png",
        "todo{0}.png",
        "new{0}.png",
        "know{0}.png",
        "plan{0}.png",
        "scheduling{0}.png",
        "apply{0}.png",
        "attendance{0}.png",
      ],
    };
  },
};
</script>

適配時程式碼如下

  changeMenuImage() {
    const menu_list = this.menuList;
    const phone = 414; //手機
    const ipad = 768; //ipad
    //const ipadpro = 1024  //ipadpro
    let zoom = "";
    if (document.body.clientWidth <= phone) {
      zoom = "1x";
    } else if (
      document.body.clientWidth > phone &&
      document.body.clientWidth <= ipad
    ) {
      zoom = "2x";
    } else {
      zoom = "3x";
    }
    for (let index = 0; index < menu_list.length; index++) {
      const element = menu_list[index];
      const src = this.menuSrc[index].replace("{0}", zoom);
      element.src = require(`@/assets/images/${src}`);
    }
  },

這樣就避免一個個的賦值,即使再多一套圖片也只需要多增加一個zoom的值就行