最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React實現(xiàn)組件全屏化的操作方法

 更新時間:2021年10月16日 10:09:06   作者:米洛  
開發(fā)今天給我提了一個sql編輯器輸入框比較小,不支持放大,不太方便,下面看下我的處理方法,本文基于React+antd,給大家演示一個完整的全屏demo,感興趣的朋友一起看看吧

介紹

本文基于React+antd,給大家演示一個完整的全屏demo。

起因是開發(fā)今天給我提了一個sql編輯器輸入框比較小,不支持放大,不太方便。希望能夠全屏顯示,聯(lián)想到自己以后可能也會需要,便研究并記錄之。

其實我覺得也沒有很?。╫rz)

全屏

大家應(yīng)該都在web頁面里面見過全屏按鈕,點擊它以后頁面就成了全屏,經(jīng)常會在代碼編輯器中出現(xiàn)。

上圖就是leetcode全屏后的效果了,省略了菜單等內(nèi)容。

看起來全屏展示分為很多種,我說說我的看法。

  • leetcode這種 它只是頁面全屏
  • F11 我們可以按F11進(jìn)入全屏模式,是chrome自帶的,不需要修改代碼
  • 改變dom,其實和第一種一樣,只不過會隱藏瀏覽器部分內(nèi)容

如上圖一樣,瀏覽器的軀殼已經(jīng)不見了。

全屏的用處

全屏的話,似乎當(dāng)你希望全身心投入閱讀的時候比較需要,就好像大家看電影也喜歡全屏一樣。主要還是放大組件,讓大量輸入/閱讀操作能夠更愉快♀地進(jìn)行。

安裝react-full-screen

// yarn add react-full-screen
npm install react-full-screen --save

使用yarn或者npm安裝這個庫。官網(wǎng)提供了一些demo,鏈接在此。

編寫一個最簡單的組件

這里就直接上代碼了,代碼不多,很好懂。

import React, { useState } from "react";
import ReactDOM from "react-dom";
import "antd/dist/antd.css";
import "./index.css";
import { FullscreenOutlined, FullscreenExitOutlined } from "@ant-design/icons";
import { Tooltip, Card, Col, Row } from "antd";
import { FullScreen, useFullScreenHandle } from "react-full-screen";

const App = () => {
  // 定義full變量,為的是兼容全屏和非全屏的樣式,比如full的時候高度為200,非full高度為100
  const [full, setFull] = useState(false);
  // 創(chuàng)建一個fullScreen的handle
  const handle = useFullScreenHandle();

  return (
    <div style={{ background: "#ececec", height: 500 }}>
      <Row gutter={[8, 8]}>
        <Col span={8}>
          <Card style={{ height: 500 }}>左側(cè)card</Card>
        </Col>
        <Col span={16}>
          <FullScreen
            handle={handle}
            onChange={setFull}
            style={{ background: "#ffffff" }}
          >
            <Card style={{ height: 500 }}>
              <div>
                <Tooltip title="全屏">
                  <FullscreenOutlined
                    style={{ fontSize: 16 }}
                    onClick={() => {
                      // 點擊設(shè)置full為true,接著調(diào)用handle的enter方法,進(jìn)入全屏模式
                      setFull(true);
                      handle.enter();
                    }}
                  />
                </Tooltip>
                <Tooltip title="退出全屏">
                  <FullscreenExitOutlined
                    style={{ fontSize: 16, marginLeft: 16 }}
                    // 退出全屏模式并把full設(shè)置為false
                    onClick={() => {
                      setFull(false);
                      handle.exit();
                    }}
                  />
                </Tooltip>
              </div>
              <div>假設(shè)這是一個編輯器</div>
            </Card>
          </FullScreen>
        </Col>
      </Row>
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById("container"));

展示出來是這個樣子,代碼里面加入了注釋,大家對著看即可。由于codesandbox里面不太支持,所以我放到了一個antd pro的項目里面,給大家看看效果。

這樣,我們做到了只放大編輯器的效果,隱藏掉了其他不重要的部分(左側(cè)部分)。

存在的問題

這樣還遠(yuǎn)遠(yuǎn)不夠,里面還有一些細(xì)節(jié)要優(yōu)化。

  • 默認(rèn)背景為黑色,不友好,我們需要設(shè)置樣式
  • 我們應(yīng)該在全屏模式把編輯器高度變大
  • 還有暗坑,待會再說

各個擊破

背景色

我們使用的這個庫,會默認(rèn)包裹一個全局的div,當(dāng)全屏的時候,class為.fullscreen.fullscreen-enabled,而非全屏的時候則為fullscreen。

所以我們在全局/組件的樣式里面寫如下的css即可:

.fullscreen.fullscreen-enabled {
  background: #fff;
  padding: 24px;
}

可以看到這個樣式已經(jīng)生效了,而且我們加入了padding,這樣看起來Card就不會被擠到邊上。

高度

我們之前設(shè)置了full變量,所以我們修改一下代碼,根據(jù)full來判斷高度。

可以看到盒子的高度已經(jīng)發(fā)生了變化。

擴展部分

如果你以為這就結(jié)束了,那就大錯特錯了。接下來我們說一說暗坑。

在antd組件里面,modal/drawer/message等等都是在body中生成的dom元素,所以我們會遇到什么問題呢?

全屏模式根本就看不到對話框/消息提示等。

好在antd提供了對應(yīng)的參數(shù),控制dom的掛載元素。

Modal

modal可以這么解決,我們首先設(shè)置一個full_screen的id:

注意,這個id一定要在FullScreen組件里面。

接著我們在Modal.info,Modal組件里面都加入如下參數(shù):

注意: 這里的modal我的demo里面并沒有寫,這個屬于擴展部分。寫一個modal組件也不復(fù)雜,大家可以自己嘗試下。

Modal.info這樣的api

Modal.info({
  title: 'cud請求參數(shù)',
  width: 800,
  // 注意加上這個
  getContainer: document.getElementById('full_screen')
  })

message

通過message.config傳入getContainer方法:

這里我沒找到很好的辦法,每次message.info的時候都需要config一下,還是比較麻煩的。如果作為全局配置則又可能出問題,大家有更好的辦法可以留言哈。

到此這篇關(guān)于React實現(xiàn)組件全屏化的文章就介紹到這了,更多相關(guān)React組件全屏化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React中獲取數(shù)據(jù)的3種方法及優(yōu)缺點

    React中獲取數(shù)據(jù)的3種方法及優(yōu)缺點

    這篇文章主要介紹了React中獲取數(shù)據(jù)的3種方法及優(yōu)缺點,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 使用React+ts實現(xiàn)無縫滾動的走馬燈詳細(xì)過程

    使用React+ts實現(xiàn)無縫滾動的走馬燈詳細(xì)過程

    這篇文章主要給大家介紹了關(guān)于使用React+ts實現(xiàn)無縫滾動的走馬燈詳細(xì)過程,文中給出了詳細(xì)的代碼示例以及圖文教程,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-08-08
  • React props和state屬性的具體使用方法

    React props和state屬性的具體使用方法

    本篇文章主要介紹了React props和state屬性的具體使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • React DOM-diff 節(jié)點源碼解析

    React DOM-diff 節(jié)點源碼解析

    這篇文章主要為大家介紹了React DOM-diff節(jié)點源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • react表單受控的實現(xiàn)方案

    react表單受控的實現(xiàn)方案

    數(shù)據(jù)的受控控制一直是react里的一個痛點,當(dāng)我想要實現(xiàn)一個輸入框的受控控制時,我需要定義一個onChange和value,手動去實現(xiàn)數(shù)據(jù)的綁定,本文小編給大家介紹了react表單受控的實現(xiàn)方案,需要的朋友可以參考下
    2023-12-12
  • 一文詳解React Redux設(shè)計思想與工作原理

    一文詳解React Redux設(shè)計思想與工作原理

    最近看項目中使用了?Redux,?便嘗試了解一波?Redux?的設(shè)計思想與工作原理,所以本文詳細(xì)的給大家介紹了Redux設(shè)計思想與工作原理,需要的朋友可以參考下
    2023-09-09
  • React Hook的使用示例

    React Hook的使用示例

    這篇文章主要介紹了React Hook的使用示例,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • React Hooks如何主動更新Hooks組件

    React Hooks如何主動更新Hooks組件

    這篇文章主要介紹了React Hooks如何主動更新Hooks組件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • React虛擬列表的實現(xiàn)代碼

    React虛擬列表的實現(xiàn)代碼

    最近看了vueuse的useVirtualList的實現(xiàn)方式,發(fā)現(xiàn)虛擬滾動效果不錯,就嘗試著同樣的寫法改成react版本,虛擬列表主要包含三部分組成,offset,viewcapacity,overscan,本文就給大家介紹一下React虛擬列表的實現(xiàn),需要的朋友可以參考下
    2023-08-08
  • 詳解使用React進(jìn)行組件庫開發(fā)

    詳解使用React進(jìn)行組件庫開發(fā)

    本篇文章主要介紹了詳解使用React進(jìn)行組件庫開發(fā),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論

南澳县| 治多县| 贡觉县| 兴仁县| 习水县| 南木林县| 龙海市| 怀宁县| 东乌| 阿克陶县| 新巴尔虎左旗| 芜湖县| 乌兰县| 锡林郭勒盟| 上犹县| 伊金霍洛旗| 库车县| 三亚市| 青岛市| 安丘市| 广昌县| 贵阳市| 永年县| 财经| 吉首市| 岳池县| 比如县| 德庆县| 大兴区| 麻栗坡县| 武隆县| 衡南县| 会理县| 中牟县| 余江县| 探索| 霍山县| 保亭| 石河子市| 华蓥市| 承德市|