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

React如何實現(xiàn)瀏覽器打印部分內(nèi)容詳析

 更新時間:2019年05月19日 11:48:21   作者:碼飛_CC  
這篇文章主要給大家介紹了關(guān)于利用React如何實現(xiàn)瀏覽器打印部分內(nèi)容的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用React具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

近期著手項目任務(wù)的打印功能,在此作個記錄,本文介紹基于React的一種調(diào)用瀏覽器打印頁面指定內(nèi)容的方法。

整體思路: 通過構(gòu)建一個隱藏的元素(該元素包裹需打印的內(nèi)容),當(dāng)打印行為觸發(fā)時,將頁面其他的一些不需要打印的元素隱藏,然后將需打印的元素追加到body中,打印完成后,再恢復(fù)初始狀態(tài)即可。瀏覽器打印的本質(zhì)還是將web頁面中的元素打印出來而已。

1. 構(gòu)建待打印元素

在頁面中構(gòu)建一個display為none的元素,里面的內(nèi)容為你需要打印的內(nèi)容。我們還需要設(shè)置包裹打印內(nèi)容的元素的ref屬性,以便于后面獲取到元素。

<div style={{ display: 'none' }}>
 <div ref={el => (this.printRef = el)}>
 { 打印內(nèi)容 }
 </div>
</div>

2. 打印動作觸發(fā)時的處理

處理流程:

  1. 獲取待打印元素;
  2. 將根元素隱藏;
  3. 將待打印元素追加到body中;
  4. 調(diào)用瀏覽器的打印預(yù)覽;
  5. 預(yù)覽界面關(guān)閉后,將待打印元素從body中移除,將原始頁面恢復(fù)。
let printView = this.state.printRef //獲取待打印元素
document.querySelector('#root').className = 'print-hide' //將根元素隱藏
document.body.appendChild(printView) //將待打印元素追加到body中
window.print() //調(diào)用瀏覽器的打印預(yù)覽
document.body.removeChild(printView) //將待打印元素從body中移除
document.querySelector('#root').className = '' //將原始頁面恢復(fù)

對應(yīng)的CSS設(shè)置:

@page {
 size: A4;
 margin: 0;
}
@media print {
 html, body {
  min-width: 0;
  width: 210mm; 
  height: 297mm;
 }
 .print-hide {
 visibility: hidden!important;
 display: none!important;
 }
}

其中,@page中的size可以自己設(shè)置紙張的大小,如果是A4紙可以直接設(shè)置值為A4,媒體查詢@media print中設(shè)置的是打印時的樣式,因為打印設(shè)備知道其輸出區(qū)域的物理大小,所以使用厘米(cm)、毫米(mm)、英寸(in)等作為打印設(shè)計的單位完全可行。

補充(其他原生的打印方法)

直接替換body的內(nèi)容為要打印的內(nèi)容,之后再重新刷新頁面。

const old = window.document.body.innerHTML //備份原來的頁面
window.document.body.innerHTML = ''
window.document.body.appendChild(/* 將你要打印的內(nèi)容附加到這 */)
window.print() //調(diào)用print()函數(shù)時,會跳出打印預(yù)覽的界面,以下的代碼被阻塞,關(guān)閉預(yù)覽界面后繼續(xù)執(zhí)行
window.document.body.innerHTML = old
window.location.reload() //重新加載舊頁面

打開一個新窗口,將打印內(nèi)容放到新窗口打印,打印結(jié)束后關(guān)閉新窗口

const newWindow = window.open("打印窗口", "_blank")
const docStr = '<div>test</div>' //需要打印的內(nèi)容
newWindow.document.write(docStr)
const styles = document.createElement("style")
styles.setAttribute('type', 'text/css') //media="print"
styles.innerHTML = ''
newWindow.document.getElementsByTagName('head')[0].appendChild(styles)
newWindow.print()
newWindow.close()

以上兩種方法可能會造成CSS樣式應(yīng)用無效的問題。

3. 注意點

第二小節(jié)的步驟2中的意思是:將頁面中所有不需要打印的元素隱藏,特別注意像模態(tài)窗Model這些元素,也要為它們加上 'print-hide'className屬性。

如果需要在特定位置強制分頁打印,可以嘗試在對應(yīng)元素上設(shè)置page-break-before:always !important、page-break-after:always !importantCSS屬性,該屬性只對塊級元素有效。

進(jìn)入打印預(yù)覽后,我們無法獲知用戶最終是選擇了打印,還是選擇了取消。這里若有人知道解決方法的話,歡迎留言。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 淺談箭頭函數(shù)寫法在ReactJs中的使用

    淺談箭頭函數(shù)寫法在ReactJs中的使用

    這篇文章主要介紹了淺談箭頭函數(shù)寫法在ReactJs中的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • react quill中圖片上傳由默認(rèn)轉(zhuǎn)成base64改成上傳到服務(wù)器的方法

    react quill中圖片上傳由默認(rèn)轉(zhuǎn)成base64改成上傳到服務(wù)器的方法

    這篇文章主要介紹了react quill中圖片上傳由默認(rèn)轉(zhuǎn)成base64改成上傳到服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • ahooks解決用戶多次提交方法示例

    ahooks解決用戶多次提交方法示例

    這篇文章主要為大家介紹了ahooks解決用戶多次提交的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • React使用emotion寫css代碼

    React使用emotion寫css代碼

    這篇文章主要介紹了React如何使用emotion寫css代碼,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • React實現(xiàn)組件之間狀態(tài)共享的幾種方法

    React實現(xiàn)組件之間狀態(tài)共享的幾種方法

    在開發(fā)現(xiàn)代Web應(yīng)用時,管理組件之間的狀態(tài)共享是一個重要的課題,特別是在使用React這個流行的前端庫時,如何有效地在不同組件之間傳遞狀態(tài),確保應(yīng)用的響應(yīng)性和可維護(hù)性,是我們需要掌握的關(guān)鍵技能,在本文中,我們將探討幾種有效的狀態(tài)共享策略,需要的朋友可以參考下
    2025-02-02
  • 詳解React獲取DOM和獲取組件實例的方式

    詳解React獲取DOM和獲取組件實例的方式

    這篇文章主要介紹了React獲取DOM和獲取組件實例的方式,如何創(chuàng)建refs來獲取對應(yīng)的DOM呢?目前有三種方式,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • React key值的作用和使用詳解

    React key值的作用和使用詳解

    這篇文章主要介紹了React key值的作用和使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 40行代碼把Vue3的響應(yīng)式集成進(jìn)React做狀態(tài)管理

    40行代碼把Vue3的響應(yīng)式集成進(jìn)React做狀態(tài)管理

    這篇文章主要介紹了40行代碼把Vue3的響應(yīng)式集成進(jìn)React做狀態(tài)管理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • React Native 集成 ArcGIS 地圖的詳細(xì)過程

    React Native 集成 ArcGIS 地圖的詳細(xì)過程

    ArcGIS官方提供了 JavaScript SDK,也提供了 ArcGIS-Runtime-SDK-iOS,但是并沒有提供 React Native的版本,所以這里使用了 react-native-arcgis-mapview 庫,本文給大家介紹React Native 集成 ArcGIS 地圖的詳細(xì)過程,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • react封裝Dialog彈框的方法

    react封裝Dialog彈框的方法

    這篇文章主要為大家詳細(xì)介紹了react封裝Dialog彈框的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

贺州市| 襄汾县| 温泉县| 饶平县| 洛川县| 霍城县| 和林格尔县| 杂多县| 新沂市| 修文县| 安康市| 云和县| 阳谷县| 忻州市| 阜阳市| 海口市| 密云县| 南木林县| 温泉县| 仁化县| 宝丰县| 承德县| 宜兴市| 东兰县| 全南县| 韶关市| 东台市| 梁山县| 花莲县| 博白县| 临洮县| 磴口县| 普宁市| 九龙县| 视频| 沽源县| 秀山| 肥乡县| 宁武县| 扎赉特旗| 白银市|