精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從0到1搭建一款頁面自適應組件(Vue.js)

開發 前端
本篇教大家從0到1搭建一款頁面自適應組件(Vue.js), 組件將根據屏幕比例及當前瀏覽器窗口大小,自動進行縮放處理。建議在組件內使用百分比搭配flex進行布局,以便于在不同的分辨率下得到較為一致的展示效果。

[[382308]]

 組件將根據屏幕比例及當前瀏覽器窗口大小,自動進行縮放處理。

  • 建議在組件內使用百分比搭配flex進行布局,以便于在不同的分辨率下得到較為一致的展示效果。
  • 使用前請注意將body的margin設為0,否則會引起計算誤差。

fullScreenContainer.vue

  1. <template> 
  2.   <div id="full-screen-container" :ref="ref"
  3.     <template v-if="ready"
  4.       <slot></slot> 
  5.     </template> 
  6.   </div> 
  7. </template> 
  8.  
  9. <script> 
  10. import autoResize from './autoResize.js' 
  11. export default { 
  12.   name'DvFullScreenContainer'
  13.   mixins: [autoResize], 
  14.   data () { 
  15.     return { 
  16.       ref: 'full-screen-container'
  17.       allWidth: 0, 
  18.       scale: 0, 
  19.       datavRoot: ''
  20.       ready: false 
  21.     } 
  22.   }, 
  23.   methods: { 
  24.     afterAutoResizeMixinInit () { 
  25.       const { initConfig, setAppScale } = this 
  26.       initConfig() 
  27.       setAppScale() 
  28.       this.ready = true 
  29.     }, 
  30.     initConfig () { 
  31.       const { dom } = this 
  32.       const { width, height } = screen 
  33.       this.allWidth = width 
  34.       dom.style.width = `${width}px` 
  35.       dom.style.height = `${height}px` 
  36.     }, 
  37.     setAppScale () { 
  38.       const { allWidth, dom } = this 
  39.       const currentWidth = document.body.clientWidth 
  40.       dom.style.transform = `scale(${currentWidth / allWidth})` 
  41.     }, 
  42.     onResize () { 
  43.       const { setAppScale } = this 
  44.       setAppScale() 
  45.     } 
  46.   } 
  47. </script> 
  48.  
  49. <style lang="scss"
  50. #full-screen-container { 
  51.   position: fixed; 
  52.   top: 0px; 
  53.   left: 0px; 
  54.   overflow: hidden; 
  55.   transform-origin: left top
  56.   z-index: 999; 
  57. </style> 

autoResize.js

  1. export default { 
  2.     data() { 
  3.         return { 
  4.             dom: ''
  5.             width: 0, 
  6.             height: 0, 
  7.             debounceInitWHFun: ''
  8.             domObserver: '' 
  9.         }; 
  10.     }, 
  11.     methods: { 
  12.         debounce(delay, callback) { 
  13.             let lastTime; 
  14.  
  15.             return function() { 
  16.                 clearTimeout(lastTime); 
  17.  
  18.                 const [that, args] = [this, arguments]; 
  19.  
  20.                 lastTime = setTimeout(() => { 
  21.                     callback.apply(that, args); 
  22.                 }, delay); 
  23.             }; 
  24.         }, 
  25.  
  26.         observerDomResize(dom, callback) { 
  27.             const MutationObserver = 
  28.                 window.MutationObserver || 
  29.                 window.WebKitMutationObserver || 
  30.                 window.MozMutationObserver; 
  31.  
  32.             const observer = new MutationObserver(callback); 
  33.  
  34.             observer.observe(dom, { 
  35.                 attributes: true
  36.                 attributeFilter: ['style'], 
  37.                 attributeOldValue: true 
  38.             }); 
  39.  
  40.             return observer; 
  41.         }, 
  42.         async autoResizeMixinInit() { 
  43.             const { 
  44.                 initWH, 
  45.                 getDebounceInitWHFun, 
  46.                 bindDomResizeCallback, 
  47.                 afterAutoResizeMixinInit 
  48.             } = this; 
  49.  
  50.             await initWH(false); 
  51.  
  52.             getDebounceInitWHFun(); 
  53.  
  54.             bindDomResizeCallback(); 
  55.  
  56.             if (typeof afterAutoResizeMixinInit === 'function'
  57.                 afterAutoResizeMixinInit(); 
  58.         }, 
  59.         initWH(resize = true) { 
  60.             const { $nextTick, $refs, ref, onResize } = this; 
  61.  
  62.             return new Promise(resolve => { 
  63.                 $nextTick(() => { 
  64.                     const dom = (this.dom = $refs[ref]); 
  65.  
  66.                     this.width = dom ? dom.clientWidth : 0; 
  67.                     this.height = dom ? dom.clientHeight : 0; 
  68.  
  69.                     if (!dom) { 
  70.                         console.warn( 
  71.                             'DataV: Failed to get dom node, component rendering may be abnormal!' 
  72.                         ); 
  73.                     } else if (!this.width || !this.height) { 
  74.                         console.warn( 
  75.                             'DataV: Component width or height is 0px, rendering abnormality may occur!' 
  76.                         ); 
  77.                     } 
  78.  
  79.                     if (typeof onResize === 'function' && resize) onResize(); 
  80.  
  81.                     resolve(); 
  82.                 }); 
  83.             }); 
  84.         }, 
  85.         getDebounceInitWHFun() { 
  86.             const { initWH } = this; 
  87.  
  88.             this.debounceInitWHFun = this.debounce(100, initWH); 
  89.         }, 
  90.         bindDomResizeCallback() { 
  91.             const { dom, debounceInitWHFun } = this; 
  92.  
  93.             this.domObserver = this.observerDomResize(dom, debounceInitWHFun); 
  94.  
  95.             window.addEventListener('resize', debounceInitWHFun); 
  96.         }, 
  97.         unbindDomResizeCallback() { 
  98.             let { domObserver, debounceInitWHFun } = this; 
  99.  
  100.             if (!domObserver) return
  101.  
  102.             domObserver.disconnect(); 
  103.             domObserver.takeRecords(); 
  104.             domObserver = null
  105.  
  106.             window.removeEventListener('resize', debounceInitWHFun); 
  107.         } 
  108.     }, 
  109.     mounted() { 
  110.         const { autoResizeMixinInit } = this; 
  111.  
  112.         autoResizeMixinInit(); 
  113.     }, 
  114.     beforeDestroy() { 
  115.         const { unbindDomResizeCallback } = this; 
  116.  
  117.         unbindDomResizeCallback(); 
  118.     } 
  119. }; 

這樣,一個頁面自適應組件就這樣搭建完成了,下面,我們將引入組件看一下效果。

  1. <template> 
  2.   <div id="app"
  3.     <fullScreenContainer> 
  4.       <img alt="Vue logo" src="./assets/logo.png" /> 
  5.       <HelloWorld msg="Welcome to Your Vue.js App" /> 
  6.     </fullScreenContainer> 
  7.   </div> 
  8. </template> 
  9.  
  10. <script> 
  11. import HelloWorld from "./components/HelloWorld.vue"
  12. import fullScreenContainer from "./components/fullScreenContainer/fullScreenContainer.vue"
  13. export default { 
  14.   name"App"
  15.   components: { 
  16.     HelloWorld, 
  17.     fullScreenContainer, 
  18.   }, 
  19. }; 
  20. </script> 
  21.  
  22. <style> 
  23. #app { 
  24.   font-family: Avenir, Helvetica, Arial, sans-serif; 
  25.   -webkit-font-smoothing: antialiased; 
  26.   -moz-osx-font-smoothing: grayscale; 
  27.   text-align: center; 
  28.   color: #2c3e50; 
  29.   margin-top: 60px; 
  30. </style> 

 

效果很好,這樣對于一些開發自適應頁面非常容易。

 

責任編輯:姜華 來源: 前端歷劫之路
相關推薦

2020-12-29 05:26:27

視頻播放器Vuevideo

2021-01-27 07:24:38

TypeScript工具Java

2022-01-27 13:02:46

前端爬蟲工具

2021-09-26 05:00:11

Vscode插件

2021-03-30 07:11:22

Vue3parcel-vue-工具

2023-11-15 08:14:35

2023-03-29 08:52:58

視覺Vue組件庫

2023-03-06 11:35:55

經營分析體系

2021-04-12 08:31:53

PC-Dooring項目PC端搭建

2017-07-11 18:00:21

vue.js數據組件

2022-03-15 11:51:00

決策分析模型

2025-05-26 08:45:00

AvueVue.js前端

2020-09-16 06:12:30

Vue.js 3.0Suspense組件前端

2023-03-16 14:29:48

Vue.js測試

2019-07-31 10:18:17

Web 開發Python

2017-05-27 09:23:10

IOS框架APP框架代碼

2022-06-13 07:02:02

Zadig平臺自動化

2016-09-19 13:44:54

vue翻頁組件Web

2021-02-10 07:31:12

VuejsElementUI

2016-11-28 16:23:23

戴爾
點贊
收藏

51CTO技術棧公眾號

亚洲综合自拍网| 日韩欧美一区二区在线观看| 久热精品在线观看| 日韩系列在线| 欧美调教femdomvk| 日韩免费在线观看av| 免费人成黄页在线观看忧物| 精品在线免费视频| 97av在线视频| www.av成人| 亚洲人成网www| 欧美一区二区啪啪| 欧美日韩大尺度| 三级资源在线| 国产精品欧美一区喷水| 国产精品免费在线| 亚洲视频中文字幕在线观看| 亚洲电影av| 久久精品99久久久久久久久| 菠萝菠萝蜜网站| 成人在线分类| 欧美自拍偷拍一区| 久久久久久人妻一区二区三区| 亚洲精品传媒| 久久精品夜色噜噜亚洲a∨| 99porn视频在线| 中文字幕乱码人妻二区三区| 亚洲一区二区三区高清不卡| 色综合久久精品亚洲国产 | 五月婷婷亚洲综合| 中文字幕一区二区精品区| 永久免费精品影视网站| 草草地址线路①屁屁影院成人| 国产精品免费精品自在线观看| 日韩欧美在线视频日韩欧美在线视频| 一二三四中文字幕| 毛片免费不卡| 国产精品三级视频| 日本黑人久久| 你懂的视频在线| 97久久精品人人澡人人爽| 成人xxxxx色| 国产乱淫片视频| 麻豆国产一区二区| 国产精品久久久久7777婷婷| 99re这里只有精品在线| 国产精品美女久久久浪潮软件| 欧美激情在线观看视频| 欧美日韩成人免费观看| 中文字幕一区二区三三| 精品久久国产精品| 91ts人妖另类精品系列| 全球成人免费直播| 在线播放日韩欧美| 四季av中文字幕| 成人黄色av| 少妇高潮久久77777| 亚洲精品视频网址| 欧美好骚综合网| xxxx性欧美| 中文字幕在线有码| 欧美激情第二页| 欧美人在线视频| 国产精品第72页| 樱桃成人精品视频在线播放| 色综合久久悠悠| 国产精品第一页在线观看| 国产午夜久久| 国产精品都在这里| 91麻豆一区二区| 国产精品中文欧美| 国产日韩亚洲精品| 三级毛片在线免费看| 国产午夜亚洲精品羞羞网站| 亚洲精品二区| av在线free| 亚洲成a人在线观看| 国产精品999视频| 美女福利一区二区| 欧美日韩激情一区| 性感美女一区二区三区| 欧美巨大xxxx| 色av中文字幕一区| 久久精品久久精品久久| 欧美一级一区| 成人黄色中文字幕| 人妻一区二区三区| 国产免费成人在线视频| 国产成人生活片| 深夜av在线| 欧美日韩免费不卡视频一区二区三区| 三级av免费看| 亚洲综合图色| 91成人午夜| 欧美日韩一本到| 日韩欧美中文视频| 欧美人妖视频| 最近2019中文字幕大全第二页 | 亚洲欧美自偷自拍另类| 久久丁香四色| 亚洲美女又黄又爽在线观看| 欧美日韩色视频| 国产欧美另类| 91在线精品视频| 久久精品色图| 亚洲精品国产a| 91丨porny丨在线中文 | 天堂精品中文字幕在线| 国产精品高潮呻吟久久av无限| 国产精品伦一区二区三区| 成人黄色网址在线观看| 日韩高清av电影| 日本无删减在线| 欧美午夜电影网| 午夜剧场免费看| 久久在线视频| 日本精品一区二区三区在线播放视频 | 欧美综合久久| 91久久电影| 亚洲2020天天堂在线观看| 国产一区二区网站| 久久精品一区二区三区不卡 | www.色天使| 欧美国产专区| 国产拍精品一二三| 久久久久久女乱国产| 亚洲午夜私人影院| 婷婷中文字幕在线观看| 黑人操亚洲人| 浅井舞香一区二区| 天天综合网在线| 一片黄亚洲嫩模| www.午夜av| 久久综合国产| 国产精品中文字幕久久久| 欧美美女色图| 亚洲成人一二三| 国产亚洲精品成人a| 欧美在线首页| 亚洲一区二区中文| 黄色的网站在线观看| 精品视频在线看| 中文字幕av久久爽一区| 蜜桃伊人久久| 日本高清一区| 成人国产精品入口免费视频| 亚洲午夜av久久乱码| 日韩精品一区不卡| 久久久高清一区二区三区| 国产精品亚洲a| 在线观看欧美理论a影院| 91大神在线播放精品| 深夜福利免费在线观看| 黑人巨大精品欧美一区二区三区| 中文乱码人妻一区二区三区视频| 亚洲国产国产亚洲一二三| 国产精品国产一区二区| 少妇视频一区| 国产一区二区三区毛片| 最近中文字幕在线观看视频| 国产精品美女久久久久av爽李琼| 久久99爱视频| 一区二区三区午夜探花| 成人区精品一区二区| caoprom在线| 日韩精品久久久久| 看黄色一级大片| 国产精品护士白丝一区av| 在线看免费毛片| 欧美777四色影| 国产精品三区www17con| 亚洲精品永久免费视频| 国产亚洲欧美一区| 国产精品毛片一区二区在线看舒淇| 亚洲人成精品久久久久| 亚洲视频 中文字幕| 免费视频一区| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美深夜视频| 国产精品美女999| av官网在线播放| 亚洲国产三级网| 日韩久久久久久久久| 国产亚洲综合av| 制服下的诱惑暮生| 国产亚洲成人一区| 中文字幕一区二区三区乱码| 精品精品国产三级a∨在线| 茄子视频成人在线| av毛片在线免费看| 亚洲美女在线观看| www久久久com| 91黄色免费版| 久久久久久久久久久久久久久久久 | 国产成人精品午夜| 日本中文在线| 亚洲精品国产欧美| 97人妻人人澡人人爽人人精品| 亚洲综合丁香婷婷六月香| 欧美午夜精品一区二区| 日韩高清不卡一区二区| youjizz.com在线观看| japanese国产精品| 韩国一区二区三区美女美女秀| 久久99国产精品二区高清软件| 欧美精品久久久久久久久| 91精彩视频在线观看| 亚洲精品www久久久| 国产免费黄色大片| 91久久精品一区二区三区| 国产亚洲成人av| 国产精品护士白丝一区av| 一二三不卡视频| 国产成人在线观看免费网站| 中文字幕第80页| 日韩午夜精品| www.欧美黄色| 一区二区日韩欧美| 夜夜爽99久久国产综合精品女不卡| 日韩深夜影院| 国模精品一区二区三区| 香蕉国产在线视频| 久久国产三级精品| 福利视频一二区| 99久精品视频在线观看视频| 久久国产精品-国产精品| 91导航在线观看| 成人性视频网站| 91看片破解版| 日本中文一区二区三区| 国产精品动漫网站| 亚洲精选91| 欧美视频在线观看视频| 美女国产一区| 99re在线播放| 欧美一级免费| 国产高清在线不卡| 亚洲欧美一区二区三区| 欧美激情一区二区三级高清视频| 国产精品扒开做爽爽爽的视频| 亚洲天堂影视av| 亚洲 欧美 激情 小说 另类| 亚洲成avwww人| 女人床在线观看| 亚洲国产一区二区三区在线播放| 亚洲人体一区| 不卡视频在线| 亚洲午夜在线观看| 欧美hd在线| 在线免费观看成人网| 欧美疯狂party性派对| 中文字幕中文字幕在线中一区高清 | 91丨九色丨国产| 白嫩亚洲一区二区三区| 亚洲a成v人在线观看| 涩涩屋成人免费视频软件| 91日本在线视频| 亚洲精品观看| 国产乱码精品一区二区三区卡| 丁香五月缴情综合网| 久久av一区二区| 国产欧美日韩免费观看| 水蜜桃亚洲精品| 香蕉精品视频在线观看| 免费日韩在线观看| 亚洲国产日韩在线| 国产男女激情视频| 精久久久久久久久久久| 潘金莲一级淫片aaaaa| jiyouzz国产精品久久| 91网站免费视频| 中文字幕一区二区三区在线观看| 久久久久久久久毛片| 欧美日韩国产中字| 中文字幕在线观看国产| 欧美成人免费网站| 深夜视频在线免费| 久久精品国产欧美亚洲人人爽| caopo在线| 日本精品va在线观看| 欧美在线一级| 精品久久蜜桃| 999久久久91| 欧美乱大交xxxxx潮喷l头像| 日韩精品电影在线| 中文字幕一区二区三区四| 91影院在线观看| 国产精品嫩草影院俄罗斯| 亚洲一区二区三区四区的| 国产免费一级视频| 日韩欧美在线一区二区三区| 男女av在线| 九九热这里只有精品6| 免费观看一级欧美片| 91在线色戒在线| 国产精品探花在线观看| 99中文字幕在线观看| 久久久成人网| 秘密基地免费观看完整版中文| 国产精品久久久久久亚洲伦| 国产成人一区二区三区影院在线| 欧美挠脚心视频网站| 亚洲欧美日韩动漫| 超在线视频97| 91国内外精品自在线播放| 国产精品一级久久久| 五月天久久久| 天美星空大象mv在线观看视频| www.亚洲在线| 欧美日韩精品在线观看视频| 成人免费av在线| 久久观看最新视频| 亚洲欧美久久久| 伊人av在线播放| 国产欧美日韩另类一区| 久久高清免费视频| 91麻豆精品国产91久久久更新时间| 日本五码在线| 高清在线视频日韩欧美| 欧美日韩黄网站| 伊人天天久久大香线蕉av色| 欧美午夜一区二区三区| 久青草视频在线观看| 欧美日韩视频第一区| 牛牛热在线视频| 97视频网站入口| 波多野结衣在线一区二区| 精品精品国产高清一毛片一天堂| 欧美精品久久久久久久久久丰满| 欧美激情一二三| 1204国产成人精品视频| 伊人再见免费在线观看高清版| 久久99国产精品麻豆| 欧美巨胸大乳hitomi| 在线观看免费视频综合| 飘雪影院手机免费高清版在线观看| 久久久久久国产免费| 在线精品自拍| 久久精品无码中文字幕| 国产大陆精品国产| 久久黄色免费视频| 精品久久国产老人久久综合| 毛片在线导航| 成人黄色片视频网站| 好吊日精品视频| 国产精品日日摸夜夜爽| 亚洲午夜电影在线| 熟妇人妻一区二区三区四区| 国内精品久久久久影院 日本资源| 亚洲高清在线一区| 国产精品国产对白熟妇| jlzzjlzz国产精品久久| 九一国产在线观看| 亚洲欧洲中文天堂| 亚洲四虎影院| 咪咪色在线视频| 国产成都精品91一区二区三| 日本三级欧美三级| 日韩精品视频在线免费观看| 在线免费日韩片| 亚洲国产欧美日韩| 国产米奇在线777精品观看| 亚洲国产精品久| 亚洲国产私拍精品国模在线观看| 成人欧美大片| 亚洲国产精品www| 国产精品一区二区久激情瑜伽 | 久久噜噜噜精品国产亚洲综合| 国产成人福利av| 成人在线观看黄| 国产精品美女久久久久久久久久久| 国产精品久久久久久免费| 欧美成人亚洲成人日韩成人| 国产亚洲成av人片在线观黄桃| 色综合av综合无码综合网站| 国产精品美女一区二区在线观看| 国产成人精品av在线观| 3344国产精品免费看| 久久一区91| 娇妻高潮浓精白浆xxⅹ| 色琪琪一区二区三区亚洲区| 含羞草www国产在线视频| 激情欧美一区二区三区中文字幕| 日韩国产高清在线| 永久看片925tv| 亚洲欧美中文日韩在线| 国产欧美视频在线| 免费在线激情视频| 日韩美女精品在线| 香港三日本三级少妇66| 成人动漫网站在线观看| 国产精品毛片一区二区三区| 黄色一级大片在线免费观看| 日韩av网址在线观看| 国产亚洲字幕| 欧美日韩在线免费播放| 夜夜精品视频一区二区| 91xxx在线观看| 精品无人区一区二区三区竹菊| 九九**精品视频免费播放|