Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 成人午夜精品,不卡中文字幕在线观看,欧美爽爽爽爽爽爽视频

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

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


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

          續(xù)創(chuàng)作,加速成長!這是我參與「掘金日新計(jì)劃 · 6 月更文挑戰(zhàn)」的第20天,點(diǎn)擊查看活動(dòng)詳情


          本文簡介

          點(diǎn)贊 + 關(guān)注 + 收藏 = 學(xué)會(huì)了


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

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

          本文要講解的就是這3種裝飾線在 fabric.js 中的使用方法。除了初始化配置外,還支持項(xiàng)目運(yùn)行時(shí),讓用戶動(dòng)態(tài)配置。

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



          初始化時(shí)設(shè)置

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

          • 上劃線 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個(gè)字母 a ,而且都在同一行。

          styles 第一個(gè)元素的 key 為 0 的意思是第一行,行號(hào)下標(biāo)從0開始。

          大概這個(gè)意思

          styles: {
            0: { // 第1行
              0:, // 第1行 第1個(gè)字
              1:, // 第1行 第2個(gè)字
              2:  // 第1行 第3個(gè)字
            }
          }
          

          如果需要換行,那就要根據(jù)行號(hào)來定義了。換行的方法是文本內(nèi)容里使用 \n 做換行。

          動(dòng)態(tài)設(shè)置

          除了在初始化時(shí)可以設(shè)置裝飾線外,F(xiàn)abric.js 也提供了在運(yùn)行時(shí)用戶手動(dòng)設(shè)置。不過代碼會(huì)稍微復(fù)雜一點(diǎn)。

          其實(shí)動(dòng)態(tài)設(shè)置上劃線、中劃線和下劃線的操作都是一樣的,唯一要變的就是屬性名。

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

          <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') // 創(chuàng)建文字
          
            canvas.add(iText)
          
            function linethrough() {
              let activeTxt = canvas.getActiveObject() // 獲取當(dāng)前選中的文字
          
              // 如果當(dāng)前沒選中文字,那什么都不操作
              if (!activeTxt) return
          
              // 判斷當(dāng)前是否進(jìn)入編輯狀態(tài)
              if (activeTxt.isEditing) {
                // 編輯狀態(tài)
                const state = activeTxt.getSelectionStyles().find(item => item.linethrough !== true)
          
                // 如果當(dāng)前
                if (!state || (JSON.stringify(state) === '{}' && activeTxt['linethrough'] === true)) {
                  // 如果當(dāng)前已經(jīng)設(shè)置了中劃線,那就把全局中劃線取消
                  activeTxt.setSelectionStyles({ 'linethrough': false })
                } else {
                  // 如果當(dāng)前沒設(shè)置中劃線,那就添加上中劃線
                  activeTxt.setSelectionStyles({ 'linethrough': true })
                }
              } else {
                // 選擇狀態(tài)
                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. 創(chuàng)建文字
          3. 將文字添加到畫布中
          4. linethrough 方法添加或取消中劃線


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

          linethrough 的邏輯如下

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



          代碼倉庫

          ?IText 動(dòng)態(tài)設(shè)置裝飾線

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

          合一些常用的實(shí)用導(dǎo)航菜單效果展示給小伙伴們,希望對(duì)大家有幫助!

          每個(gè)導(dǎo)航文字下面的下劃線會(huì)隨著鼠標(biāo)的移上由左到右緩慢的過渡

          實(shí)現(xiàn)該效果的方法如下

          首先是html布局:

          css樣式:


          主站蜘蛛池模板: 一区二区三区国产| 国产一区二区三区韩国女主播| 亚洲AV成人精品日韩一区| 亚洲日韩精品一区二区三区无码 | 内射白浆一区二区在线观看| 国产AV午夜精品一区二区三区| 丰满人妻一区二区三区视频| 国产精品美女一区二区三区| 91久久精品国产免费一区| 看电影来5566一区.二区| 在线视频一区二区三区三区不卡| 国产人妖视频一区二区破除| 亚洲色精品三区二区一区| 亚洲av无码一区二区三区天堂古代| 色妞AV永久一区二区国产AV| 国产精品毛片一区二区| 丝袜美腿高跟呻吟高潮一区| 国产一区二区三区视频在线观看| 日韩在线视频一区| 国产福利一区视频| 国产综合视频在线观看一区| 精品国产高清自在线一区二区三区| 无码日韩精品一区二区三区免费| 看电影来5566一区.二区| 久久精品一区二区三区四区| 亚洲爆乳精品无码一区二区三区 | 亚洲一区精品视频在线| 久久青草精品一区二区三区| 亚洲av鲁丝一区二区三区| 久久99精品一区二区三区| 亚洲精品一区二区三区四区乱码| 亚洲一区二区中文| 亚洲一区二区三区精品视频| 日本一区频道在线视频| 91精品乱码一区二区三区| 99久久无码一区人妻a黑| 成人欧美一区二区三区在线视频| 免费高清av一区二区三区| 国产一区二区三区小向美奈子| 亚洲免费一区二区| 美女福利视频一区|