整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          360手機瀏覽器電腦網頁模式切換方法

          • 件版本:
          • 軟件大小:
          • 軟件授權:
          • 適用平臺:Android
          • 下載http://dl.pconline.com.cn/download/89908.html

          360手機瀏覽器電腦網頁模式切換方法。 相信大家都知道,使用360手機瀏覽器瀏覽網頁,與在電腦上用360瀏覽器瀏覽網頁所看到的畫面是不一樣的。那么,如果我想用360手機瀏覽器瀏覽電腦網頁,該怎么操作呢?其實,把360手機瀏覽器切換成電腦網頁模式的方法很簡單,下面就由小編為大家介紹一下。

          1、在手機上打開【360手機瀏覽器】;

          2、然后在360手機瀏覽器主界面點擊【菜單】選項;

          3、接著再從彈出的面板上點擊【設置】;

          4、進入設置頁面后,繼續點擊【高級設置】;

          5、進入高級設置后,繼續點擊【瀏覽器標識】;

          6、 然后從彈出的面板上【勾選-電腦模式】;

          7、以上步驟操作完成后,接著返回隨意打開一個網頁,這時就可以看到360手機瀏覽器已經變成電腦網頁的模式啦!

          好了,以上就是360手機瀏覽器切換成電腦網頁模式的方法,你學會了嗎?

          者開源了一個Web思維導圖,在做導出為圖片的功能時走了挺多彎路,所以通過本文來記錄一下。

          思維導圖的節點和連線都是通過 svg渲染的,作為一個純 js 庫,我們不考慮通過后端來實現,所以只能思考如何通過純前端的方式來實現將svg或html轉換為圖片。

          使用img標簽結合canvas導出

          我們都知道 img 標簽可以顯示 svg,然后 canvas 又可以渲染 img,那么是不是只要將svg渲染到img標簽里,再通過canvas導出為圖片就可以呢,答案是肯定的。

          const svgToPng = async (svgStr) => {
              // 轉換成blob數據
              let blob = new Blob([svgStr], {
                type: 'image/svg+xml'
              })
              // 轉換成data:url數據
              let svgUrl = await blobToUrl(blob)
              // 繪制到canvas上
              let imgData = await drawToCanvas(svgUrl)
              // 下載
              downloadFile(imgData, '圖片.png')
          }

          svgStr是要導出的svg字符串,比如:

          然后通過Blob構造函數創建一個類型為image/svg+xml的blob數據,接下來將blob數據轉換成data:URL:

          const blobToUrl = (blob) => {
              return new Promise((resolve, reject) => {
                  let reader = new FileReader()
                  reader.onload = evt => {
                      resolve(evt.target.result)
                  }
                  reader.onerror = err => {
                      reject(err)
                  }
                  reader.readAsDataURL(blob)
              })
          }

          其實就是base64格式的字符串。

          接下來就可以通過img來加載,并渲染到canvas里進行導出:

          const drawToCanvas = (svgUrl) => {
              return new Promise((resolve, reject) => {
                const img = new Image()
                // 跨域圖片需要添加這個屬性,否則畫布被污染了無法導出圖片
                img.setAttribute('crossOrigin', 'anonymous')
                img.onload = async () => {
                  try {
                    let canvas = document.createElement('canvas')
                    canvas.width = img.width
                    canvas.height = img.height
                    let ctx = canvas.getContext('2d')
                    ctx.drawImage(img, 0, 0, img.width, img.height)
                    resolve(canvas.toDataURL())
                  } catch (error) {
                    reject(error)
                  }
                }
                img.onerror = e => {
                  reject(e)
                }
                img.src = svgUrl
              })
          }

          canvas.toDataURL()方法返回的也是一個base64格式的data:URL字符串:

          最后就可以通過a標簽來下載:

          const downloadFile = (file, fileName) => {
            let a = document.createElement('a')
            a.href = file
            a.download = fileName
            a.click()
          }

          實現很簡單,效果也不錯,不過這樣就沒問題了嗎,接下來我們插入兩張圖片試試。

          處理存在圖片的情況

          第一張圖片是使用base64的data:URL方式插入的,第二張圖片是使用普通url插入的:

          導出結果如下:

          可以看到,第一張圖片沒有問題,第二張圖片裂開了,可能你覺得同源策略的問題,但實際上換成同源的圖片,同樣也是裂開的,解決方法很簡單,遍歷svg節點樹,將圖片都轉換成data:URL的形式即可:

          // 操作svg使用了@svgdotjs/svg.js庫
          const transfromImg = (svgNode) => {
              let imageList = svgNode.find('image')
              let task = imageList.map(async item => {
                // 獲取圖片url
                let imgUlr = item.attr('href') || item.attr('xlink:href')
                // 已經是data:URL形式不用轉換
                if (/^data:/.test(imgUlr)) {
                  return
                }
                // 轉換并替換圖片url
                let imgData = await drawToCanvas(imgUlr)
                item.attr('href', imgData)
              })
              await Promise.all(task)
              return svgNode.svg()// 返回svg html字符串
          }

          這里使用了前面的drawToCanvas方法來將圖片轉換成data:URL,這樣導出就正常了:

          到這里,將純 svg 轉換為圖片就基本沒啥問題了。

          處理存在foreignObject標簽的情況

          svg提供了一個foreignObject標簽,可以插入html節點,實際上,筆者就是使用它來實現節點的富文本編輯效果的:

          接下來使用前面的方式來導出,結果如下:

          明明顯示沒有問題,導出時foreignObject內容卻發生了偏移,這是為啥呢,其實是因為默認樣式的問題,頁面全局清除了margin和padding,以及將box-sizing設置成了border-box:

          那么當svg存在于文檔樹中時是沒有問題的,但是導出時使用的是svg字符串,是脫離于文檔的,所以沒有這個樣式覆蓋,那么顯示自然會出現問題,知道了原因,解決方法有兩種,一是遍歷所有嵌入的html節點,手動添加內聯樣式,注意一定要給所有的html節點都添加,只給svg、foreignObject或最外層的html節點添加都是不行的;第二種是直接在foreignObject標簽里添加一個style標簽,通過style標簽來加上樣式,并且只要給其中一個foreignObject標簽添加就可以了,兩種方式看你喜歡哪種,筆者使用的是第二種:

          const transformForeignObject = (svgNode) => {
              let foreignObjectList = svgNode.find('foreignObject')
              if (foreignObjectList.length > 0) {
                  foreignObjectList[0].add(SVG(`<style>
                  * {
                      margin: 0;
                      padding: 0;
                      box-sizing: border-box;
                  }
                  </style>`))
              }
              return svgNode.svg()
          }

          導出結果如下:

          可以看到,一切正常。

          關于兼容性的問題,筆者測試了最新的chrome、firefox、opera、safari、360急速瀏覽器,運行都是正常的。

          踩坑記錄

          前面介紹的是筆者目前采用的方案,看著實現其實非常簡單,但是過程漫長且坎坷,接下來,開始我的表演。

          foreignObject標簽內容在firefox瀏覽器上無法顯示

          對于svg的操作筆者使用的是svg.js庫,創建富文本節點的核心代碼大致如下:

          import { SVG, ForeignObject } from '@svgdotjs/svg.js'
          
          let html = `<div>節點文本</div>`
          let foreignObject = new ForeignObject()
          foreignObject.add(SVG(html))
          g.add(foreignObject)

          SVG方法是用來將一段html字符串轉換為dom節點的。

          在chrome瀏覽器和opera瀏覽器上渲染非常正常,但是在firefox瀏覽器上foreignObject標簽的內容完全渲染不出來:

          檢查元素也看不出有任何問題,并且神奇的是只要在控制臺元素里編輯一下嵌入的html內容,它就可以顯示了,百度搜索了一圈,也沒找到解決方法,然后因為firefox瀏覽器占有率并不高,于是這個問題就擱淺了。

          使用img結合canvas導出圖片里foreignObject標簽內容為空

          chrome瀏覽器雖然渲染是正常的:

          但是使用前面的方式導出時foreignObject標簽內容卻是跟在firefox瀏覽器里顯示一樣是空的:

          firefox能忍這個不能忍,于是嘗試使用一些將html轉換為圖片的庫。

          使用html2canvas、dom-to-image等庫

          使用html2canvas:

          import html2canvas from 'html2canvas'
          
          const useHtml2canvas = async (svgNode) => {
              let el = document.createElement('div')
              el.style.position = 'absolute'
              el.style.left = '-9999999px'
              el.appendChild(svgNode)
              document.body.appendChild(el)// html2canvas轉換需要被轉換的節點在文檔中
              let canvas = await html2canvas(el, {
                  backgroundColor: null
              })
              mdocument.body.removeChild(el)
              return canvas.toDataURL()
          }

          html2canvas可以成功導出,但是存在一個問題,就是foreignObject標簽里的文本樣式會丟失:

          這應該是html2canvas的一個bug,不過看它這issues數量和提交記錄:

          指望html2canvas改是不現實的,于是又嘗試使用dom-to-image:

          import domtoimage from 'dom-to-image'
          
          const dataUrl = domtoimage.toPng(el)

          發現dom-to-image更不行,導出完全是空白的:

          并且它上一次更新時間已經是五六年前,所以沒辦法,只能回頭使用html2canvas。

          后來有人建議使用dom-to-image-more,粗略看了一下,它是在dom-to-image庫的基礎上修改的,嘗試了一下,發現確實可以,于是就改為使用這個庫,然后又有人反饋在一些瀏覽器上導出節點內容是空的,包括firefox、360,甚至chrome之前的版本都不行,筆者只能感嘆,太難了,然后又有人建議使用上一個大版本,可以解決在firefox上的導出問題,但是筆者試了一下,在其他一些瀏覽器上依舊存在問題,于是又在考慮要不要換回html2canvas,雖然它存在一定問題,但至少不是完全空的。

          解決foreignObject標簽內容在firefox瀏覽器上無法顯示的問題

          用的人多了,這個問題又有人提了出來,于是筆者又嘗試看看能不能解決,之前一直認為是firefox瀏覽器的問題,畢竟在chrome和opera上都是正常的,這一次就想會不會是svgjs庫的問題,于是就去搜它的issue,沒想到,還真的搜出來了issue,大意就是因為通過SVG方法轉換的dom節點是在svg的命名空間下,也就是使用document.createElementNS方法創建的,導致部分瀏覽器渲染不出來,歸根結底,這還是不同瀏覽器對于規范的不同實現導致的:

          你說chrome很強吧,確實,但是無形中它阻止了問題的暴露。

          知道了原因,那么修改也很簡單了,只要將SVG方法第二個參數設為true即可,或者自己來創建節點也可以:

          foreignObject.add(document.createElemnt('div'))

          果然,在firefox瀏覽器上正常渲染了。

          解決img結合canvas導出圖片為空的問題

          解決了在firefox瀏覽器上foreignObject標簽為空的問題后,自然會懷疑之前使用img結合canvas導出圖片時foreignObject標簽為空會不會也是因為這個問題,同時了解了一下dom-to-image庫的實現原理,發現它也是通過將dom節點添加到svg的foreignObject標簽中實現將html轉換成圖片的,那么就很搞笑了,我本身要轉換的內容就是一個嵌入了foreignObject標簽的svg,使用dom-to-image轉換,它會再次把傳給它的svg添加到一個foreignObject標簽中,這不是套娃嗎,既然dom-to-image-more能通過foreignObject標簽成功導出,那么不用它必然也可以,到這里基本確信之前不行就是因為命名空間的問題。

          果然,在去掉了dom-to-image-more庫后,重新使用之前的方式成功導出了,并且在firefox、chrome、opera、360等瀏覽器中都不存在問題,兼容性反而比dom-to-image-more庫好。

          總結

          雖然筆者的實現很簡單,但是dom-to-image-more這個庫實際上有一千多行代碼,那么它到底多做了些什么呢,點個關注,我們下一篇文章再見。

          ord、Excel、PPT是我們平時辦公中經常用到的幾款軟件,它可以適應我們不同的日常需要,為我們提供高效便捷的操作體驗。

          但是,大部分人其實苦于文件格式的相互轉化,不知道office軟件的隱藏的操作技巧,也常因為沒有掌握操作技巧而浪費了許多時間。

          今天,小編就教大家如何實現Word、Excel、PPT文件之間格式的相互轉化,無需下載其他軟件,只需20秒,輕松完成文件格式的相互轉化!


          Excel轉word

          Excel轉word只需要兩步操作。

          首先,我們將表格的內容復制下來,然后打開Word。

          按下【Ctrl+Alt+V】,接著選擇【Microsoft Excel工作表對象】,最后點擊確定,表格就轉換成Word了。


          Excel轉PPT

          在將Excel轉化為PPT的時候,我們既要將內容完整復制到PPT界面中,又不能影響Excel表格的原始格式。

          首先,我們復制Excel表格并打開PPT文稿界面;

          點擊【開始】菜單下的【選擇性粘貼】,選擇【Mirosoft Excel工作表對象】,點擊確定;

          選擇插入的表格,雙擊鼠標左鍵就可以進入編輯狀態啦!你也可以根據自己的需要通過拖拉邊框對插入的表格大小進行調整,以適應PPT演示文稿所容納的界面。


          Word轉Excel

          在將Word轉化為Excel時,我們不能直接復制,而需要先將word改為網頁格式,再轉換成表格。

          先打開word,然后文件—另存為—保存類型改為網頁,即 Html。

          接著新建表格,將保存好的網頁文件拖拽到Excel中,最后選擇只讀即可完成轉化。


          Word轉PPT

          除了鼠標右鍵復制粘貼之外,辦公中我們經常遇到的問題是,如何按照文檔大綱將其分頁轉化到PPT界面。其實只需要簡單幾步就能完成。

          首先打開word文檔,然后點擊【視圖】菜單下的【大綱】分別將標題和正文內容設置為1級和2級內容。

          設置好大綱后,點擊右上角的【文件】→【選項】,在彈窗中選擇【快速訪問工具欄】,然后在右邊找到【發送Microsoft PowerPoint】并將其添加到功能區中,如下圖所示。

          添加完成后,回到大綱界面,點擊頂部的電腦圖標,word會將文檔發送到PPT中,這樣word就變成PPT。

          以上就是今天分享的內容了,其實Word、Excel、PPT之間的格式轉化非常簡單,只要簡單幾步,就能一鍵輕松轉換。

          歡迎大家在評論中與我們分享其他好用的電腦技巧。


          主站蜘蛛池模板: 无码av免费毛片一区二区| 中文字幕一区二区三区在线不卡| 国产三级一区二区三区| 成人精品视频一区二区三区不卡| 国产精品乱码一区二区三| 亚洲av无码一区二区三区乱子伦| aⅴ一区二区三区无卡无码| 无码人妻精品一区二区三区久久久| 秋霞午夜一区二区| 日韩精品人妻一区二区中文八零| 精品一区二区三区中文| 日韩精品免费一区二区三区| 性色av无码免费一区二区三区| 亚洲丰满熟女一区二区v| 日本伊人精品一区二区三区| 亚洲国产成人一区二区三区| 免费精品一区二区三区第35| 国产AV午夜精品一区二区三| 狠狠色婷婷久久一区二区| 99精品国产一区二区三区| 99精品国产一区二区三区| 色妞AV永久一区二区国产AV| 中文字幕在线播放一区| 国产在线视频一区| 亚洲综合无码AV一区二区| 亚洲中文字幕无码一区| 久久人妻av一区二区软件| 久久精品国产第一区二区三区| 少妇激情av一区二区| 国产精品福利一区二区| 亚洲码欧美码一区二区三区| 性色av无码免费一区二区三区| 国产凸凹视频一区二区| 国产美女露脸口爆吞精一区二区 | 亚洲美女高清一区二区三区| 精品免费AV一区二区三区| 国产精品福利区一区二区三区四区| 精品福利一区二区三区| 日韩精品在线一区二区| 亚洲熟妇AV一区二区三区浪潮| 午夜爽爽性刺激一区二区视频|