一般情況下,我們在使用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的值就行