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的值就行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM