收藏
回答

请问微信小程序editor富文本目前只能插入图片该如何插入视频与链接?

回答关注问题邀请回答
收藏

3 个回答

  •  宋
     宋
    06-18
      insertLink() {
        const that = this
        wx.showModal({
          title: '插入链接',
          editable: true,
          placeholderText: '输入链接地址(包含http://)',
          success(urlRes) {
            if (urlRes.confirm) {
              wx.showModal({
                title: '链接文字',
                editable: true,
                placeholderText: '输入显示文字',
                success(textRes) {
                  if (textRes.confirm) {
                    // 插入定位标识
                    that.editorCtx.insertText({
                      text: '#-*=*-*=*-*=*@-link超链接标识link-@*=*-*=*-*=*-#',
                      success() {
                        // 获取全文内容
                        that.editorCtx.getContents({
                          success(res) {
                            const ops = res.delta.ops
                            const findex = ops.findIndex(item => {
                              return item.insert && item.insert.includes('link超链接标识link')
                            })
    
    
                            if (findex > -1) {
                              const original = ops[findex].insert
                              const attrs = ops[findex].attributes || {}
                              const [prefix, suffix] = original.split('#-*=*-*=*-*=*@-link超链接标识link-@*=*-*=*-*=*-#')
    
    
                              // 构建新操作
                              const newOps = []
                              if (prefix) newOps.push({ insert: prefix, attributes: attrs })
                              newOps.push({
                                insert: textRes.content,
                                attributes: {
                                  link: urlRes.content,
                                  color: '#007AFF',
                                  textDecoration: 'underline'
                                }
                              })
                              if (suffix) newOps.push({ insert: suffix, attributes: attrs })
    
    
                              // 更新编辑器内容
                              ops.splice(findex, 1, ...newOps)
                              that.editorCtx.setContents({
                                delta: { ops },
                                success() {
                                  that.editorCtx.blur()
                                }
                              })
                            }
                          }
                        })
                      }
                    })
                  }
                }
              })
            }
          }
        })
      },
    

    这个是添加链接的方法,你试一试 看看能不能满足需要

    06-18
    有用 2
    回复 3
    •  宋
       宋
      06-18
      插入视频我觉得可以先插入一张视频的图片(黑色背景加个播放按钮的图片)注意的是 width: ‘80%’ 方便用户编辑视频 alt是真实的视频地址  当上传整个富文本内容是 对这个处理  比如  正则表达式用于匹配img标签中带有alt属性且alt属性值为视频链接的模式 再用replace方法 替换为video标签
      06-18
      回复
    •  宋
       宋
      06-18
      06-18
      回复
    • 浅蓝
      浅蓝
      06-21
      感谢,但是a标签的href属性能保留么?好像被过滤掉了
      06-21
      回复
  • AndyQsmart
    AndyQsmart
    07-02

    我通过insertImage接口实现了插入图片、超链接、表格、公式的功能。

    是的,所有上述我都通过svg图片渲染出来,通过定义data-custom数据结构保存相关属性,在里面定义type字段来区分不同元素。理论上视频也可以通过这种方式实现,渲染一个封面图或者svg图片,点击可以打开一个弹窗,播放或者修改视频。不过最终生成的html需要再额外处理一下,把里面的img标签通过data-custom字段来转换回真实的标签类型。

    svg图片可以通过 src: `data:image/svg+xml;base64,${base64.encode(svg_str)}`的方式进行插入。

    至于点击事件,我通过一些不太优美的方式,使用EditorContext.getBounds实现了Editor点击图片触发事件。(在我的回答里有相关实现的思路)

    07-02
    有用
    回复 6
    • 浅蓝
      浅蓝
      07-04
      您好,有代码吗??
      07-04
      回复
    • AndyQsmart
      AndyQsmart
      07-06回复浅蓝
      我用的Taro框架,这个是插入超链接的函数(插入公式、视频都是类似的):
      07-06
      回复
    • AndyQsmart
      AndyQsmart
      07-06回复浅蓝
      总之就是将必要的数据信息存入data字段里,然后src通过svg图片来渲染所需的内容(公式可以用Mathjax,超链接可以通过svg进行渲染文字,或者超链接也通过Mathjax渲染),不过最终生成的html代码里,公式、超链接等对应的img标签,需要通过data字段里的type来判断,然后处理成超链接<a></a>标签或者公式对应的html等。
      07-06
      回复
    • AndyQsmart
      AndyQsmart
      07-06回复浅蓝
      至于点击元素的时候触发点击事件,就是通过getBounds函数,从0遍历到最后一个字符,判断字符的范围是不是包含了点击坐标,然后根据我上述的data里面的type字段来触发相应的超链接、图片、公式等点击事件,然后处理相应的逻辑。这是我Taro框架下的代码,仅供参考:
      07-06
      回复
    • AndyQsmart
      AndyQsmart
      07-06回复浅蓝
      最后,就是还有一些细节需要处理,比如渲染的图片需要和文字对齐,图片中的文字大小需要和font-size一致(图片大小需要和文字的字体大小成比例缩放),可以调节图片的width: ?em、height: ?em、vertical-align: ?em来实现。由于不能传入style,导致这三个参数不能调整为任意值,只能给图片加extClass,所以我只能通过less预先生成一批固定值,然后?em四舍五入到整数,近似处理,下面这段是预处理的less:
      07-06
      回复
    查看更多(1)
  • 智能回答 智能回答 本次回答由AI生成
    06-18
    有用
登录 后发表内容