跳到主要内容

气泡菜单

Bubble Menu
此扩展将使上下文菜单出现在所选文本附近。
使用它让用户将标记应用于他们的文本选择。
与往常一样,标记和样式完全取决于您。

npm install @tiptap/extension-bubble-menu

用法示例

基础

🌰 举个例子
可编辑
exampleImg
collapsePng

import { BubbleMenu, EditorContent, useEditor } from '@tiptap/react'
import StarterKit from '@tiptap/starter-kit'
import React, { useEffect } from 'react'

export default () => {
const editor = useEditor({
extensions: [
StarterKit,
],
content: `
<p>
嘿,试着在这里选择一些文本。将弹出一个菜单,用于选择一些内联样式。记住:您可以完全控制此菜单的内容和样式。
</p>
`,
})

const [isEditable, setIsEditable] = React.useState(true)

useEffect(() => {
if (editor) {
editor.setEditable(isEditable)
}
}, [isEditable, editor])

return (
<>
<div>
<input type="checkbox" checked={isEditable} onChange={() => setIsEditable(!isEditable)} />
可编辑
</div>
{editor && <BubbleMenu editor={editor}>
<button
onClick={() => editor.chain().focus().toggleBold().run()}
className={editor.isActive('bold') ? 'is-active' : ''}
>
粗体
</button>
<button
onClick={() => editor.chain().focus().toggleItalic().run()}
className={editor.isActive('italic') ? 'is-active' : ''}
>
斜体
</button>
<button
onClick={() => editor.chain().focus().toggleStrike().run()}
className={editor.isActive('strike') ? 'is-active' : ''}
>
删除线
</button>
</BubbleMenu>}
<EditorContent editor={editor} />
</>
)
}

自定义显示逻辑

🌰 举个例子
exampleImg
collapsePng
import { BubbleMenu, EditorContent, useEditor } from "@tiptap/react";
import StarterKit from "@tiptap/starter-kit";
import React from "react";
import Link from "@tiptap/extension-link";

export default () => {
const editor = useEditor({
// 默认编辑器不支持a标签,官方提供了扩展Link支持 这里先不要细究
extensions: [StarterKit, Link],
content: '<p> 嘿,我是普通文本,<a href="/">是有链接选中才显示菜单</a> </p>',
});

const shouldShow = ({ editor, view, state, oldState, from, to }) => {
// 仅在链节节点被选中的时候才显示 气泡菜单
return editor.isActive("link");
};

return (
<>
{editor && (
<BubbleMenu editor={editor} shouldShow={shouldShow}>
<button>移除链接地址?</button>
</BubbleMenu>
)}
<EditorContent editor={editor} />
</>
);
};

API

属性说明类型默认值
tippyOptions本扩展基于tippy.js,此参数(如延迟显示等)将完全传递给它Object
shouldShow自定义显示菜单的逻辑(props) => boolean-
updateDelay更新延迟Number250 毫秒
element菜单挂载点(原生使用方式会用到)HTMLElementnull
pluginKey扩展唯一标识(一般用不到)stringPluginKey