Tiptap,: 富文本編輯器入門與案例分析

Tiptap 是一個現代的富文本編輯器,基于 ProseMirror 打造,旨在提供一個靈活且功能強大的文本編輯解決方案。它具有開箱即用的能力,同時也允許開發者根據業務需求進行高度定制化擴展。與傳統的富文本編輯器相比,Tiptap 提供了更精細的控制、更加簡潔的 API 以及豐富的擴展機制,幫助開發者構建與業務需求緊密結合的編輯器。

在這里插入圖片描述

一、Tiptap 介紹

1. 什么是 Tiptap?

Tiptap 是一個開源的富文本編輯器,它基于 ProseMirror 構建,ProseMirror 本身是一個非常強大的文本編輯框架,提供了低級的操作 API,用于處理文檔結構、格式化文本和管理編輯器狀態。而 Tiptap 在此基礎上提供了更高層的 API,使得開發者能夠更加簡便地進行開發,尤其適用于需要定制化或擴展功能的應用場景。

Tiptap 的最大亮點在于它的 可擴展性靈活性,開發者不僅可以選擇使用內置的基本功能,還可以通過插件來定制和擴展編輯器,滿足不同需求的同時,也能降低開發成本。

2. Tiptap 的優勢

  • 極高的定制化能力:Tiptap 提供了簡單易用的 API 和豐富的插件機制,開發者可以很方便地根據需求擴展編輯器功能,甚至自定義編輯器行為和界面。
  • 兼容性強:Tiptap 支持多種 Web 框架,尤其是 React 和 Vue 等流行的前端框架。無論你使用哪個框架,都可以輕松集成 Tiptap。
  • 開箱即用的功能:Tiptap 提供了強大的內置功能,如文本加粗、斜體、標題、列表、代碼塊、鏈接等常見的富文本編輯功能。
  • 插件生態豐富:Tiptap 擁有豐富的插件庫,你可以通過插件擴展編輯器功能,包括 Markdown 支持、表格支持、圖片上傳、代碼高亮等。
  • 強大的社區支持:作為一個開源項目,Tiptap 有著活躍的開發和使用社區,可以輕松獲取資源、解決方案和建議。

3. 與傳統富文本編輯器的區別

與傳統的富文本編輯器(如 CKEditor、Quill 或 TinyMCE)相比,Tiptap 提供了更高的靈活性。傳統的富文本編輯器往往是封閉的系統,功能和定制性較為有限。而 Tiptap 基于 ProseMirror 提供了低層次的控制,使得開發者可以根據需求深入定制。例如,你可以自定義工具欄、插入自定義節點,甚至自定義編輯器的行為邏輯,這在傳統編輯器中是很難做到的。

二、Tiptap 安裝與配置

1. 安裝 Tiptap

Tiptap 提供了易于安裝的 NPM 包,支持多種開發環境。首先,您需要安裝以下依賴:

npm install @tiptap/core @tiptap/starter-kit

如果你還需要支持 Vue 或 React,可以安裝對應的支持包:

npm install @tiptap/react # 或者 npm install @tiptap/vue-3

2. 創建基礎編輯器

在安裝了依賴之后,我們可以使用 Tiptap 創建一個最基礎的富文本編輯器。以下是 React 示例:

import React, { useState } from "react";
import { EditorContent, useEditor } from "@tiptap/react";
import { StarterKit } from "@tiptap/starter-kit";const Editor = () => {const editor = useEditor({extensions: [StarterKit], // 使用 StarterKit 插件集content: "<p>歡迎使用 Tiptap 編輯器!</p>",});return (<div><h2>基本編輯器</h2><EditorContent editor={editor} /></div>);
};export default Editor;

通過上面的代碼,我們就已經創建了一個基礎的富文本編輯器。

在這里插入圖片描述

查看 dom,我們可以知道

在這里插入圖片描述

通過 tiptap 的 class 來修改編輯器的樣式

  width: 100vw;height: 600px;
}

在這里插入圖片描述

這樣,我們就可以放大我們的編輯器區域了。

到此為止,編輯器就引入成功了。接下來,我們可以裝一些擴展功能。

3. 配置和擴展功能

Tiptap 支持插件化機制,通過擴展功能,你可以輕松加入需要的功能。例如,添加對 超鏈接 的支持:

npm install @tiptap/extension-link
import { Link } from '@tiptap/extension-link';const editor = useEditor({extensions: [StarterKit,Link, // 啟用 Link 擴展],
});

通過這種方式,你可以快速將新的功能集成到編輯器中。

我們將我們的 content 內容改成如下

    content: '<p>在此插入超鏈接 <a href="https://example.com">點擊這里</a></p>',

在這里插入圖片描述

三、Tiptap 的核心功能和擴展

Tiptap 提供了很多核心功能和擴展包,可以幫助開發者創建復雜的富文本編輯器。以下是一些常見的功能和擴展:

1. 富文本編輯功能

  • 基本文本格式化:支持文本加粗、斜體、下劃線、刪除線、文本顏色、字體大小等基本文本格式。
  • 列表和表格:內置支持無序列表、有序列表、嵌套列表、表格的創建與編輯。
  • 標題和段落格式:支持不同級別的標題(h1, h2, h3 等)、段落、引用塊等格式化。
  • 代碼塊:支持插入代碼塊,自動進行語法高亮。
  • 鏈接:支持超鏈接功能,可以插入并編輯鏈接。

2. 插件擴展

  • Markdown 支持:Tiptap 提供了一個 Markdown 擴展,允許編輯器支持 Markdown 格式。開發者可以通過此插件快速創建一個 Markdown 編輯器。
npm install @tiptap/extension-markdown
  • 表情符號支持:通過插件,Tiptap 支持表情符號的插入。
npm install @tiptap/extension-emoji
  • 圖片上傳:Tiptap 支持通過上傳圖片擴展來集成圖片上傳功能,支持將本地文件上傳到服務器并顯示。
npm install @tiptap/extension-image
  • 媒體嵌入:Tiptap 提供了豐富的嵌入功能,支持視頻、音頻等多媒體內容的插入。

所有支持的插件可以在 https://tiptap.dev/docs/editor/extensions/overview 這里查看

四、Tiptap 的應用案例

通過上面,我們可以安裝各種插件來擴展我們的編輯器。只要我們在增加一系列的按鈕和上面的插件進行融合,那么我們就可以實現一個功能強大的編輯器了。

import { EditorContent, useEditor } from "@tiptap/react";
import { StarterKit } from "@tiptap/starter-kit";
import { Link } from "@tiptap/extension-link";
import { Image } from "@tiptap/extension-image";
import { Blockquote } from "@tiptap/extension-blockquote";
import { CodeBlock } from "@tiptap/extension-code-block";
import { Heading } from "@tiptap/extension-heading";
import { ListItem } from "@tiptap/extension-list-item";
import { OrderedList } from "@tiptap/extension-ordered-list";
import { BulletList } from "@tiptap/extension-bullet-list";
import { Bold } from "@tiptap/extension-bold";
import { Italic } from "@tiptap/extension-italic";
import { Strike } from "@tiptap/extension-strike";
import { Underline } from "@tiptap/extension-underline";const Editor = () => {const editor = useEditor({extensions: [StarterKit,Link,Image,Blockquote,CodeBlock,Heading,ListItem,OrderedList,BulletList,Bold,Italic,Strike,Underline,],content: `<h2>功能強大的富文本編輯器</h2><p>歡迎使用 Tiptap 編輯器!這里展示了各種格式化功能:</p><p>文本樣式:<strong>粗體文本</strong>、<em>斜體文本</em>、<s>刪除線文本</s>、<u>下劃線文本</u></p><h2>標題示例</h2><p><a href="https://tiptap.dev">這是一個超鏈接示例</a></p><blockquote>這是一個引用塊的示例文本。引用塊通常用于強調重要內容或引用他人的話語。</blockquote><ul><li>無序列表項 1</li><li>無序列表項 2</li><li>無序列表項 3</li></ul><ol><li>有序列表項 1</li><li>有序列表項 2</li><li>有序列表項 3</li></ol><pre><code>// 這是一個代碼塊示例
function hello() {console.log("Hello, Tiptap!");
}</code></pre><p><img src="https://picsum.photos/200/100" alt="示例圖片" /></p>`,});const buttonStyle = {cursor: "pointer",margin: "0 8px",color: "#4a5568",userSelect: "none" as const,};return (<div><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleBold().run()}>加粗</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleItalic().run()}>斜體</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleStrike().run()}>刪除線</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleUnderline().run()}>下劃線</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().setFontSize(24).run()}>字體大小</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().setTextColor("red").run()}>文本顏色</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}>標題</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleBulletList().run()}>無序列表</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleOrderedList().run()}>有序列表</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleBlockquote().run()}>引用塊</span><spanstyle={buttonStyle}onClick={() => editor.chain().focus().toggleCodeBlock().run()}>代碼塊</span><spanstyle={buttonStyle}onClick={() =>editor.chain().focus().toggleLink({ href: "https://example.com" }).run()}>超鏈接</span><spanstyle={buttonStyle}onClick={() =>editor.chain().focus().insertImage({ src: "https://example.com/image.jpg" }).run()}>插入圖片</span><EditorContent editor={editor} /></div>);
};export default Editor;

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

五、總結

Tiptap 是一個功能強大且靈活的富文本編輯器,它不僅支持基礎的文本格式化,還提供了多種插件擴展,可以滿足各種需求。從創建簡單的博客編輯器到復雜的內容管理系統,Tiptap 都能夠輕松應對。如果你正在尋找一個能夠快速集成、易于定制和擴展的富文本編輯器,Tiptap 是一個非常合適的選擇。

通過本文的介紹,你應該已經掌握了 Tiptap 的基礎使用方法,并能夠開始使用它來構建自己的富文本編輯器。隨著你對 Tiptap 的深入了解,你還可以通過插件和 API 定制更多復雜的功能,滿足項目中的各種業務需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62877.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62877.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

scala的泛型類

泛型&#xff1a;類型參數化 泛型類指的是把泛型定義到類的聲明上, 即:該類中的成員的參數類型是由泛型來決定的. 在創建對象時, 明確具體的數據類型. 定義格式: class 類名&#xff08;成員名&#xff1a;數據類型&#xff09; class 類名[泛型名](成員名:泛型名) 參考代…

對比損失(Contrastive Loss)與大模型:Contrastive Loss and Large Models (中英雙語)

對比損失&#xff08;Contrastive Loss&#xff09;與大模型&#xff1a;從原理到實踐 在現代深度學習中&#xff0c;對比損失&#xff08;Contrastive Loss&#xff09;是一種核心技術&#xff0c;尤其是在對比學習&#xff08;Contrastive Learning&#xff09;中被廣泛使用…

Java基礎學習:java常用啟動命令

一、java -jar 1、系統屬性傳遞 使用形式&#xff1a;java -DpathD:\jacoco -jar 獲取方式&#xff1a;System.getProperties() 2、系統參數傳遞 使用形式&#xff1a;java -jar application.jar --jacocoPathD:\tomcat 獲取方式&#xff1a;通過啟動方法入口main的參數arg…

Linux下SVN客戶端保存賬號密碼

參考文章&#xff1a;解決&#xff1a;Linux上SVN 1.12版本以上無法直接存儲明文密碼_linux svn 保存密碼-CSDN博客新版本svn使用gpg-agent存儲密碼-CSDN博客svn之無法讓 SVN 存儲密碼&#xff0c;即使配置設置為允許_編程設計_ITGUEST 方法一&#xff1a;明文方式保存密碼 首…

負載均衡oj項目:介紹

目錄 項目介紹 項目演示 項目介紹 負載均衡oj是一個基于bs模式的項目。 用戶使用瀏覽器向oj模塊提交代碼&#xff0c;oj模塊會在所有在線的后端主機中選擇一個負載情況最低的主機&#xff0c;將用戶的代碼提交給該主機&#xff0c;該主機進行編譯運行&#xff0c;將結果返回…

gateway 微服務的入口-筆記

本文屬于b站圖靈課堂springcloud筆記系列。講的好還不要錢&#xff0c;值得推薦。 為什么需要API網關&#xff1f; 客戶端多次請求不同的微服務&#xff0c;會增加客戶端代碼和配置的復雜性&#xff0c;維護成本比價高認證復雜&#xff0c;每個微服務可能存在不同的認證方式&…

vue2+element-ui實現多行行內表格編輯

效果圖展示 當在表格中點擊編輯按鈕時:點擊的行變成文本框且數據回顯可以點擊確定按鈕修改數據或者取消修改回退數據: 具體實現步驟 1. 行數據定義編輯標記 行數據定義編輯標記 當在組件中獲取到用于表格展示數據的方法中,針對每一行數據添加一個編輯標記 this.list.f…

安卓主板_MTK聯發科android主板方案

在當前智能設備的發展中&#xff0c;安卓主板的配置靈活性和性能優化顯得尤為重要。安卓主板的聯發科方案&#xff0c;在芯片上&#xff0c;搭載聯發科MTK6761、MT8766、MT6765、MT6762、MT8768、MT8390、MTK8370以及MT8788等型號&#xff0c;均基于64位的四核或八核架構設計。…

如何破解“不會寫作”的煩惱

在人生的諸多煩惱中&#xff0c;有一種煩惱或許不那么顯眼&#xff0c;卻常常如影隨形&#xff0c;讓人倍感困擾——那就是不會寫作的煩惱。這不僅僅是對那些以寫作為生的人而言&#xff0c;對于每一個需要在學習、工作或生活中以文字表達思想、情感的人來說&#xff0c;不會寫…

虛幻5描邊輪廓材質

很多游戲內都有這種描邊效果&#xff0c;挺實用也挺好看的&#xff0c;簡單復刻一下 效果演示&#xff1a; Linethickness可以控制輪廓線條的粗細 這樣連完&#xff0c;然后放到網格體細節的覆層材質上即可 可以自己更改粗細大小和顏色

修改docker源

在/etc/docker/daemon.json文件中寫入 { "registry-mirrors": [ "Welcome to nginx!" ] } 執行 systemctl daemon-reload systemctl restart docker docker info能夠看到源已經被替換 現在國內能夠使用的docker源經過測試只有Welcome to nginx! …

【JavaEE】網絡(2)

一、網絡編程套接字 1.1 基礎概念 【網絡編程】指網絡上的主機&#xff0c;通過不同的進程&#xff0c;以編程的方式實現網絡通信&#xff1b;當然&#xff0c;我們只要滿足進程不同就行&#xff0c;所以即便是同一個主機&#xff0c;只要是不同進程&#xff0c;基于網絡來傳…

RANS(Reynolds-Averaged Navier-Stokes) 湍流模型類型

RANS&#xff08;Reynolds-Averaged Navier-Stokes&#xff09; 湍流模型有多種不同的類型&#xff0c;除了標準的 kkk-ω 湍流模型&#xff0c;還有其他一些常用的湍流模型。RANS 模型的核心思想是對 Navier-Stokes 方程進行 雷諾平均&#xff0c;通過將流動場的瞬時變量分解為…

JS中this的值詳細講解以及面試指向練習

this 的值取決于它出現的上下文&#xff1a;函數、類或全局。 在函數內部&#xff0c;this 的值取決于函數如何被調用&#xff0c;this 是語言在函數體被執行時為你創建的綁定 對于典型的函數&#xff0c;this 的值是函數被訪問的對象。換句話說&#xff0c;如果函數調用的形…

2024年河南省高等職業教育技能大賽 大數據分析與應用賽項競賽方案

2024年河南省高等職業教育技能大賽 大數據分析與應用賽項競賽方案 一、賽項名稱 賽項名稱&#xff1a;大數據分析與應用 賽項編號&#xff1a;HN033 賽項組別&#xff1a;專業核心基本技能賽項 專業大類&#xff1a;電子與信息等 競賽形式&#xff1a;學生組&#xff08;團體賽…

vue繞過rules自定義編寫動態校驗

今天犯了個低級錯誤&#xff0c;雖然走了很多彎路&#xff0c;但這個過程還是值得記錄一下 例子如下&#xff0c;有兩個輸入框&#xff1a; 第一個是套餐選擇下拉框&#xff0c;可以下拉選擇三個內容 第二個要根據上面的套餐選擇三個選項來決定怎么顯示&#xff0c;使用v-if&…

數字化招聘系統如何幫助企業實現招聘效率翻倍提升?

眾所周知&#xff0c;傳統的招聘方式已經難以滿足現代企業對人才的需求&#xff0c;而數字化招聘系統的出現&#xff0c;為企業提供了全新的解決方案。通過數字化招聘系統&#xff0c;企業可以自動化處理繁瑣的招聘流程&#xff0c;快速篩選合適的候選人&#xff0c;從而大幅提…

短視頻矩陣源碼開發部署全流程解析

在當今的數字化時代&#xff0c;短視頻已成為人們娛樂、學習和社交的重要方式。短視頻矩陣系統的開發與部署&#xff0c;對于希望在這一領域脫穎而出的企業和個人而言&#xff0c;至關重要。本文將詳細闡述短視頻矩陣源碼的開發與部署流程&#xff0c;并附上部分源代碼示例&…

華為云云原生中間件DCS DMS 通過中國信通院與全球IPv6測試中心雙重能力檢測

近日&#xff0c;中國信息通信研究院&#xff08;以下簡稱“中國信通院”&#xff09;與全球IPv6測試中心相繼宣布&#xff0c;華為云的分布式緩存服務&#xff08;Distributed Cache Service&#xff0c;簡稱DCS&#xff09;和分布式消息服務&#xff08;Distributed Message …

關閉WPS在線功能資源和功能推薦

Kingsoft\WPS Office\12.1.0.18912\office6 選擇 【高級】 點擊 【確定】