整合營銷服務商

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

          免費咨詢熱線:

          如何在Word中批量添加填空題的下劃線?


          日常工作中,經常需要在原有的Word文檔基礎上,將指定內容抹去,變成供填充內容的下劃線,如下,將下圖中的以下所有<>及其包含的內容替換成下劃線;

          續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第20天,點擊查看活動詳情


          本文簡介

          點贊 + 關注 + 收藏 = 學會了


          在 HTML 也好,Word 也好,基本都有下劃線和刪除線(中劃線)。

          Fabric.js 作為一個老牌 canvas 庫,當然也提供中劃線下劃線的配置啦,除此之外還提供了上劃線的配置。

          本文要講解的就是這3種裝飾線在 fabric.js 中的使用方法。除了初始化配置外,還支持項目運行時,讓用戶動態配置。

          本文案例使用了 IText ,該組件支持編輯功能。



          初始化時設置

          這是上劃線、中劃線和下劃線的文檔:

          • 上劃線 overline
          • 中劃線 linethrough
          • 下劃線 underline


          <canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
          
          <script src="../../script/fabric.5.2.1.js"></script>
          <script>
            const canvas = new fabric.Canvas('c')
          
            const iText = new fabric.IText('aaa',{
              styles: {
                0: {
                  0: { overline: true }, // 上劃線
                  1: { linethrough: true }, // 中劃線
                  2: { underline: true } // 下劃線
                }
              }
            })
          
            canvas.add(iText)
          </script>
          

          本例只有3個字母 a ,而且都在同一行。

          styles 第一個元素的 key 為 0 的意思是第一行,行號下標從0開始。

          大概這個意思

          styles: {
            0: { // 第1行
              0:, // 第1行 第1個字
              1:, // 第1行 第2個字
              2:  // 第1行 第3個字
            }
          }
          

          如果需要換行,那就要根據行號來定義了。換行的方法是文本內容里使用 \n 做換行。

          動態設置

          除了在初始化時可以設置裝飾線外,Fabric.js 也提供了在運行時用戶手動設置。不過代碼會稍微復雜一點。

          其實動態設置上劃線、中劃線和下劃線的操作都是一樣的,唯一要變的就是屬性名。

          我以中劃線為例,之后上劃線和下劃線只需改個屬性名。

          <button onclick="linethrough()">中劃線</button>
          
          <canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
          
          <canvas id="c" width="300" height="300" style="border: 1px solid #ccc"></canvas>
          
          <!-- 引入fabric -->
          <script src="../../script/fabric.5.2.1.js"></script>
          <script>
            const canvas = new fabric.Canvas('c') // 初始化畫布
          
            const iText = new fabric.IText('hello wor\nld') // 創建文字
          
            canvas.add(iText)
          
            function linethrough() {
              let activeTxt = canvas.getActiveObject() // 獲取當前選中的文字
          
              // 如果當前沒選中文字,那什么都不操作
              if (!activeTxt) return
          
              // 判斷當前是否進入編輯狀態
              if (activeTxt.isEditing) {
                // 編輯狀態
                const state = activeTxt.getSelectionStyles().find(item => item.linethrough !== true)
          
                // 如果當前
                if (!state || (JSON.stringify(state) === '{}' && activeTxt['linethrough'] === true)) {
                  // 如果當前已經設置了中劃線,那就把全局中劃線取消
                  activeTxt.setSelectionStyles({ 'linethrough': false })
                } else {
                  // 如果當前沒設置中劃線,那就添加上中劃線
                  activeTxt.setSelectionStyles({ 'linethrough': true })
                }
              } else {
                // 選擇狀態
                if (activeTxt['linethrough'] === true) {
                  activeTxt.linethrough = false
                  activeTxt.dirty = true;
                  let s = activeTxt.styles
                  for(let i in s) {
                    for (let j in s[i]) {
                      s[i][j].linethrough = false
                    }
                  }
                } else {
                  activeTxt.linethrough = true
                  activeTxt.dirty = true;
                  let s = activeTxt.styles
                  for(let i in s) {
                    for (let j in s[i]) {
                      s[i][j].linethrough = true
                    }
                  }
                }
              }
          
              canvas.renderAll()
            }
          </script>
          

          上面的代碼主要做這幾步操作:

          1. 初始化畫布
          2. 創建文字
          3. 將文字添加到畫布中
          4. linethrough 方法添加或取消中劃線


          最主要的操作邏輯寫在 linethrough 方法里了。

          linethrough 的邏輯如下

          1. 獲取當前選中的文字
          2. 如果沒選中就不做任何操作
          3. 如果選中了,判斷是否進入編輯狀態
          4. 編輯狀態 獲取當前被選中文字的中劃線狀態 如果被選中文字設置了中劃線,就把中劃線取消掉 如果被選中文字沒設置中劃線,就添加中劃線
          5. 如果不是編輯狀態,只是單擊了 iText 進入框選狀態 如果需要全局取消中劃線 全局取消 循環每個字符,并取消每個字符的中劃線 需要全局設置中劃線 全局設置 再逐個字符單獨設置
          6. 重新渲染畫布



          代碼倉庫

          ?IText 動態設置裝飾線

          https://gitee.com/k21vin/fabricjs-demo/blob/master/tutorial/IText/styles04decoration.html

          合一些常用的實用導航菜單效果展示給小伙伴們,希望對大家有幫助!

          每個導航文字下面的下劃線會隨著鼠標的移上由左到右緩慢的過渡

          實現該效果的方法如下

          首先是html布局:

          css樣式:


          主站蜘蛛池模板: 亚洲AV综合色区无码一区爱AV| 成人精品一区久久久久| 国产精品合集一区二区三区| 国产成人久久一区二区不卡三区 | av无码一区二区三区| 亚洲一区二区在线免费观看| 无码人妻精品一区二区三区99不卡| 久久精品国产亚洲一区二区| 一区二区三区中文字幕| 午夜视频在线观看一区| 极品人妻少妇一区二区三区| 日韩人妻不卡一区二区三区| 亚欧色一区W666天堂| 中文字幕在线无码一区二区三区| av无码精品一区二区三区四区| 国产丝袜无码一区二区视频| 一本大道在线无码一区| 亚洲日本va一区二区三区 | 国产人妖视频一区二区破除| 男人的天堂av亚洲一区2区| 成人免费观看一区二区| 3D动漫精品一区二区三区| 在线播放一区二区| 国产一区二区久久久| 亚洲av乱码中文一区二区三区| 国产日韩精品视频一区二区三区 | 少妇一夜三次一区二区| 无码中文字幕人妻在线一区二区三区| tom影院亚洲国产一区二区| 无码中文字幕一区二区三区| 国产伦精品一区二区三区免费下载 | 精品日本一区二区三区在线观看 | 日本亚洲成高清一区二区三区| 国产在线视频一区二区三区98| 中文字幕一精品亚洲无线一区| 久久久一区二区三区| 无码中文人妻在线一区 | 亚洲综合无码一区二区痴汉| 成人精品一区二区激情| 国产高清在线精品一区二区三区| 国产精品亚洲高清一区二区|