Vue大屏自適應(yīng)--響應(yīng)式盒子

Vue大屏項(xiàng)目自適應(yīng)--響應(yīng)式盒子

一、獲取當(dāng)前瀏覽器可視窗口寬高

1蒋譬、在Vue項(xiàng)目 src文件夾內(nèi)新建 utils文件夾=>index.js。


utils

2、在utils文件夾內(nèi)的index.js內(nèi)獲取可視窗口寬高

let Util = {};
export default Util;
/**
 * @description: 獲取頁面寬度
 * @param {type}
 * @return {Number} 頁面可視窗口寬度
 */
Util.getPageWidth = () => {
  // 頁面可視窗口寬度
  let pageWidth = document.documentElement.clientWidth;
  // 頁面可視窗口最小寬度
  pageWidth = pageWidth < 1280 ? 1280 : pageWidth;
  return pageWidth;
};
/**
 * @description: 獲取頁面高度
 * @param {type}
 * @return {Number} 頁面可視窗口高度
 */
Util.getPageHeight = () => {
  // 頁面可視窗口高度
  let pageHeight = document.documentElement.clientHeight;
  // 頁面可視窗口最小高度
  pageHeight = pageHeight < 720 ? 720 : pageHeight;
  return pageHeight;
};

二街立、將當(dāng)前瀏覽器可視窗口寬高存儲(chǔ)到Vuex倉(cāng)庫(kù)中

store倉(cāng)庫(kù)設(shè)置

1、在store倉(cāng)庫(kù)中創(chuàng)建自定義模塊 modules


store modules

2埠通、配置倉(cāng)庫(kù)
在modules文件夾內(nèi)的model.js文件內(nèi)引入U(xiǎn)til文件
存儲(chǔ)頁面寬高及配置修改頁面寬高函數(shù)

import Util from "@/utils";

const customModule = {
  state: {
    // 當(dāng)前頁面寬度
    pageWidth: Util.getPageWidth(),
    // 當(dāng)前頁面高度
    pageHeight: Util.getPageHeight(),
  },
  mutations: {
    //   更改頁面寬度
    setPageWidth: (state) => {
      state.pageWidth = Util.getPageWidth();
    },
    //   更改頁面高度
    setPageHeight: (state) => {
      state.pageHeight = Util.getPageHeight();
    },
  },
  actions: {
    // 修改頁面寬度
    changePageWidth({ commit }) {
      commit("setPageWidth");
    },
    // 修改頁面高度
    changePageHegiht({ commit }) {
      commit("setPageHeight");
    },
  },
};

export default customModule;

3赎离、在index.js文件內(nèi)引入自定義模塊

import Vue from "vue";
import Vuex from "vuex";
// 自定義模塊
import customModule from "./modules/model";

Vue.use(Vuex);

const store = new Vuex.Store({
  modules: {
    customModule,
  },
});
export default store;

三、在main.js文件內(nèi)監(jiān)聽

main.js 配置 window.onresize 修改頁面寬高

window.onresize = () => {
  store.dispatch("changePageWidth");
  store.dispatch("changePageHegiht");
};

四端辱、創(chuàng)建響應(yīng)式盒子組件

<template>
  <div :style="boxStyle" @click="clickFunction">
    <slot></slot>
  </div>
</template>

<script>
/**
  @description 響應(yīng)式盒子
  @augments wh: 盒子寬高(auto:100%,"height:'width'":強(qiáng)制寬高一致)
  @augments mg: 盒子外邊距
  @augments pd: 盒子內(nèi)邊距
  @augments psn: 定位
  @augments ps: 定位邊距
  @augments ratio:  等比例(根據(jù)寬計(jì)算高)
  @demo <auto-view :wh=[150,50] :psn="absolute" :ps="[50,0,0,0]"></auto-view>
 */
export default {
  name: "viewAuto",
  props: {
    //   寬高
    wh: {
      type: Array,
      default: () => [],
    },
    // 內(nèi)邊距
    pd: {
      type: Array,
      default: () => [],
    },
    // 外邊距
    mg: {
      type: Array,
      default: () => [],
    },
    // 定位模式
    psn: {
      type: String,
      default: "static",
    },
    // 定位距離
    ps: {
      type: Array,
      default: () => [],
    },
    // 等比例(根據(jù)寬計(jì)算高)
    ratio: {
      type: Number,
      default: 0,
    },
  },
  computed: {
    /**
     * @description: 響應(yīng)盒子樣式  計(jì)算屬性
     * @param {type}
     * @return {string}響應(yīng)盒子樣式
     */
    boxStyle() {
      let pageWidth = this.$store.state.customModule.pageWidth; // 當(dāng)前屏幕寬度
      let pageHeight = this.$store.state.customModule.pageHeight; // 當(dāng)前屏幕高度
      let ratio_w = pageWidth / 1920; // 寬度縮放比
      let ratio_h = pageHeight / 1080; //高度縮放比
      let style = {};
      // 根據(jù)比例設(shè)置box寬高
      if (this.wh[0]) {
        if (this.wh[0] == "auto") {
          style.width = "100%";
        } else {
          style.width = ratio_w * this.wh[0] + "px";
        }
      }
      if (this.ratio !== 0) {
        style.height = this.ratio * ratio_w * this.wh[0] + "px";
      } else {
        if (this.wh[1]) {
          if (this.wh[1] == "auto") {
            style.height = "100%";
          } else if (this.wh[1] == "width") {
            style.height = ratio_w * this.wh[0] + "px";
          } else {
            style.height = ratio_h * this.wh[1] + "px";
          }
        }
      }

      // 根據(jù)比例設(shè)置box外邊距
      if (this.mg.length > 0) {
        style["margin-top"] = ratio_h * this.mg[0] + "px";
        style["margin-right"] = ratio_w * this.mg[1] + "px";
        style["margin-bottom"] = ratio_h * this.mg[2] + "px";
        style["margin-left"] = ratio_w * this.mg[3] + "px";
      }

      // 根據(jù)比例設(shè)置box內(nèi)邊距
      if (this.pd.length > 0) {
        style["padding-top"] = ratio_h * this.pd[0] + "px";
        style["padding-right"] = ratio_w * this.pd[1] + "px";
        style["padding-bottom"] = ratio_h * this.pd[2] + "px";
        style["padding-left"] = ratio_w * this.pd[3] + "px";
      }

      // 根據(jù)比例設(shè)置box定位
      if (this.psn != "static") {
        style["position"] = this.psn;
        if (this.ps[0] != 0) {
          style["top"] = ratio_h * this.ps[0] + "px";
        }
        if (this.ps[1] != 0) {
          style["right"] = ratio_w * this.ps[1] + "px";
        }
        if (this.ps[2] != 0) {
          style["bottom"] = ratio_h * this.ps[2] + "px";
        }

        if (this.ps[3] != 0) {
          style["left"] = ratio_w * this.ps[3] + "px";
        }
      }

      return style;
    },
  },
  methods: {
    /**
     * @description: 響應(yīng)式盒子點(diǎn)擊事件
     * @param {type}
     * @return {type}
     */
    clickFunction() {
      this.$emit("click");
    },
  },
};
</script>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梁剔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舞蔽,更是在濱河造成了極大的恐慌荣病,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渗柿,死亡現(xiàn)場(chǎng)離奇詭異个盆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門颊亮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柴梆,“玉大人,你說我怎么就攤上這事终惑∩茉冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵狠鸳,是天一觀的道長(zhǎng)揣苏。 經(jīng)常有香客問我,道長(zhǎng)件舵,這世上最難降的妖魔是什么卸察? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮铅祸,結(jié)果婚禮上坑质,老公的妹妹穿的比我還像新娘。我一直安慰自己临梗,他們只是感情好涡扼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盟庞,像睡著了一般吃沪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上什猖,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天票彪,我揣著相機(jī)與錄音,去河邊找鬼不狮。 笑死降铸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摇零。 我是一名探鬼主播推掸,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼驻仅!你這毒婦竟也來了谅畅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤噪服,失蹤者是張志新(化名)和其女友劉穎铃彰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芯咧,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敬飒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邪铲。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖无拗,靈堂內(nèi)的尸體忽然破棺而出带到,到底是詐尸還是另有隱情,我是刑警寧澤英染,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布揽惹,位于F島的核電站,受9級(jí)特大地震影響四康,放射性物質(zhì)發(fā)生泄漏搪搏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一闪金、第九天 我趴在偏房一處隱蔽的房頂上張望疯溺。 院中可真熱鬧,春花似錦哎垦、人聲如沸囱嫩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墨闲。三九已至,卻和暖如春郑口,著一層夾襖步出監(jiān)牢的瞬間鸳碧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工潘酗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杆兵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓仔夺,卻偏偏與公主長(zhǎng)得像琐脏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缸兔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345