搜尋
首頁web前端Vue.jsVue指令實現大螢幕元素解析度適配詳解

這篇文章為大家帶來了關於vue的相關知識,主要介紹了Vue指令實現大屏幕元素分辨率適配詳解,包括了常見的適配方案以及css縮放方案等等,下面一起來看一下,希望對大家有幫助。

Vue指令實現大螢幕元素解析度適配詳解

【相關推薦:javascript影片教學vue.js教學

隨著前端技術的不斷發展、數據中心(中台)之類的概念的不斷升級、物聯網設備的更新和普及,越來越多的業主(項目)喜歡在系統中添加一個或多個可視化大屏,用來集中的展現數據變化、位置變化等等,老闆們也更喜歡稱之為「態勢」。

當然,身為程式設計師一般都不關心「老闆們」的想法,只要完成專案即可。但常常會有這樣的問題:我有一個大屏的模板,但是用戶的瀏覽器分辨率不夠,或者有的有書籤欄有的沒有書籤欄,更或者是有的全屏了有的只是小窗口,這樣就有了程式碼對不同解析度場景下的適配需求了。

1. 常見的適配方案

平時我們使用的web 端的適配方案,主要有以下幾種:

  • vw/vh 配合百分比實現,讓元素根據視窗大小進行自動調整
  • fontSize 配合rem 實現「單位寬度」的統一
  • 根據不同的解析度範圍調整頁面佈局
  • 版心佈局,配合最小寬度

目前大多數螢幕適應方案的原理都是採用的以上的幾種方式,但是這幾種方式也有很大的弊端:瀏覽器文字有最小尺寸!

在一般的 1080p 及以上的解析度的螢幕中,大多數設計圖的比例和顯示效果都能完美還原。但如果某個系統的頁面內容太多,或是瀏覽器部分所使用的解析度(不是實體解析度)無法達到完整顯示的要求,則採用上面的幾種方式就有可能造成文字的運算大小小於瀏覽器的最小字體大小,此時就有可能因為文字寬度超出元素而導致頁面樣式崩潰。

版心佈局配合最小寬度可以保證顯示效果,但不適合大螢幕專案。

2. CSS3 縮放方案

在上面的幾種方案都不滿足時,大家一般就會採用另一個方案:CSS3 scale 縮放。

透過計算設計圖尺寸比例與實際的頁面顯示區域大小,來動態調整元素的縮放比例。

個人認為這是針對小解析度情況下保留顯示內容及樣式最好的一種處理方式。

當然,這種方式仍然有一些弊端:

  • #後可能會造成邊緣顯示模糊
  • 如果內部存在canvas 元素,可能會導致canvas 內部的內容渲染失真
  • 高德地圖1.x 會導致事件座標偏移(2.0 已經修復)
  • ...

3. 封裝一個縮放指令

這裡簡單回顧一下Vue 的自訂指令:透過設定自訂指令和綁定參數,在元件/元素載入、更新、銷毀等不同時期執行對應的處理邏輯。

Vue 的自訂指令包含幾個鉤子函數:

  • bind: 解析到指令綁定時執行,只執行一次
  • inserted: 插入父節點時執行
  • update:元件觸發更新時執行
  • componentUpdated:所有元件更新結束後執行
  • unbind:元素解綁(銷毀)時執行,也只執行一次

這裡因為我們只需要在初始化時綁定瀏覽器的resize 事件來調整元素縮放,所以只需要配置inserted 即可;當然,為了優化程式碼邏輯,減少資源消耗等情況,也需要在unbind 階段去取消resize 事件的一個回呼函數。

程式碼如下:

// 缩放指令
import Vue from "vue";
function transformScale(el, options) {
  const { target = "width", origin = "top left" } = options;
  Vue.nextTick(() => {
    // 获取显示区域高宽
    const width = window.innerWidth;
    const height = window.innerHeight;
    el.style.transformOrigin = origin;
    if (target === "ratio") {
      const scaleX = width / CONF.width;
      const scaleY = height / CONF.height;
      el.style.transform = `scaleX(${scaleX}) scaleY(${scaleY})`;
    } else {
      let scaleProportion = 1;
      if (target === "width") {
        scaleProportion = width / CONF.width;
      }
      if (target === "height") {
        scaleProportion = height / CONF.height;
      }
      el.style.transform = `scale(${scaleProportion})`;
    }
  });
}
function inserted(el, binding) {
  const options = binding.options || { passive: true };
  const callback = () => transformScale(el, binding.value);
  window.addEventListener("resize", callback);
  callback();
  el._onResize = {
    callback,
    options
  };
}
function unbind(el) {
  if (!el._onResize) {
    return;
  }
  const { callback } = el._onResize;
  window.removeEventListener("resize", callback);
  delete el._onResize;
}
export const Scale = {
  inserted,
  unbind
};
export default Scale;

說明:

  • 指令接收一個物件參數,用來指定比例計算方式和縮放定位
  • 需要一個全域配置CONF 對象,用來指定預設的頁面尺寸
  • 為了確保頁面已經載入完,能取得到dom 元素,需要呼叫Vue.nextTick
  • 需要銷毀監聽事件

整個程式碼其實很簡單,就是透過監聽resize 事件去調整元素的縮放比例。

但這裡我也做了一點小的配置,用來適應更多的情況:

  • 接收一個target 配置,用來確認比例計算方式;可以以寬度或高度作為統一的縮放標準,也可以分別計算
  • #接收transform 的origin 配置,確保不同位置的元素可以縮放到不同的位置,避免縮放偏移
  • 不涉及綁定元素的尺寸,只需要預設尺寸即可;寫程式碼時可以直接根據設計圖配置元素尺寸

當然,這個指令不能說有多完美,還是有很多有漏洞的地方,比如沒有防抖、縮放不會改變css指定的尺寸,容易出現滾動條等;

並且因為之前的專案中也涉及到很多圖表、地圖,也常常導致一些顯示問題,所以後面有增加了一些新的指令,但是解析度適配這個問題還是要根據實際情況來確定具體的方案。

【相關推薦:javascript影片教學vue.js教學

以上是Vue指令實現大螢幕元素解析度適配詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:脚本之家。如有侵權,請聯絡admin@php.cn刪除
vue.js和前端堆棧:了解連接vue.js和前端堆棧:了解連接Apr 24, 2025 am 12:19 AM

Vue.js與前端技術棧緊密集成,提升開發效率和用戶體驗。 1)構建工具:與Webpack、Rollup集成,實現模塊化開發。 2)狀態管理:與Vuex集成,管理複雜應用狀態。 3)路由:與VueRouter集成,實現單頁面應用路由。 4)CSS預處理器:支持Sass、Less,提升樣式開發效率。

Netflix:探索React(或其他框架)的使用Netflix:探索React(或其他框架)的使用Apr 23, 2025 am 12:02 AM

Netflix選擇React來構建其用戶界面,因為React的組件化設計和虛擬DOM機制能夠高效處理複雜界面和頻繁更新。 1)組件化設計讓Netflix將界面分解成可管理的小組件,提高了開發效率和代碼可維護性。 2)虛擬DOM機制通過最小化DOM操作,確保了Netflix用戶界面的流暢性和高性能。

vue.js和前端:深入研究框架vue.js和前端:深入研究框架Apr 22, 2025 am 12:04 AM

Vue.js被開發者喜愛因為它易於上手且功能強大。 1)其響應式數據綁定係統自動更新視圖。 2)組件系統提高了代碼的可重用性和可維護性。 3)計算屬性和偵聽器增強了代碼的可讀性和性能。 4)使用VueDevtools和檢查控制台錯誤是常見的調試技巧。 5)性能優化包括使用key屬性、計算屬性和keep-alive組件。 6)最佳實踐包括清晰的組件命名、使用單文件組件和合理使用生命週期鉤子。

vue.js在前端的力量:關鍵特徵和好處vue.js在前端的力量:關鍵特徵和好處Apr 21, 2025 am 12:07 AM

Vue.js是一個漸進式的JavaScript框架,適用於構建高效、可維護的前端應用。其關鍵特性包括:1.響應式數據綁定,2.組件化開發,3.虛擬DOM。通過這些特性,Vue.js簡化了開發過程,提高了應用性能和可維護性,使其在現代Web開發中備受歡迎。

vue.js比反應好嗎?vue.js比反應好嗎?Apr 20, 2025 am 12:05 AM

Vue.js和React各有優劣,選擇取決於項目需求和團隊情況。 1)Vue.js適合小型項目和初學者,因其簡潔和易上手;2)React適用於大型項目和復雜UI,因其豐富的生態系統和組件化設計。

vue.js的功能:增強前端的用戶體驗vue.js的功能:增強前端的用戶體驗Apr 19, 2025 am 12:13 AM

Vue.js通過多種功能提升用戶體驗:1.響應式系統實現數據即時反饋;2.組件化開發提高代碼復用性;3.VueRouter提供平滑導航;4.動態數據綁定和過渡動畫增強交互效果;5.錯誤處理機制確保用戶反饋;6.性能優化和最佳實踐提升應用性能。

vue.js:定義其在網絡開發中的作用vue.js:定義其在網絡開發中的作用Apr 18, 2025 am 12:07 AM

Vue.js在Web開發中的角色是作為一個漸進式JavaScript框架,簡化開發過程並提高效率。 1)它通過響應式數據綁定和組件化開發,使開發者能專注於業務邏輯。 2)Vue.js的工作原理依賴於響應式系統和虛擬DOM,優化性能。 3)實際項目中,使用Vuex管理全局狀態和優化數據響應性是常見實踐。

了解vue.js:主要是前端框架了解vue.js:主要是前端框架Apr 17, 2025 am 12:20 AM

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),