微信小程序笔记功能(富文本editor功能)开发

一、效果图展示

模拟器及pc 端效果图 手机端就不贴了

二、把官方示例copy到自己的项目传送门

三、改一改上传图片功能

js 复制代码
  insertImage() {
    const that = this
    wx.chooseImage({
    // count:1   一次选择图片的个数
      success: function (response) {
      // 多张图片上传
        response.tempFilePaths.map(item => {
          wx.uploadFile({
            url: '上传图片api',
            name: 'file',
            formData: {
              systemId: '49603D09F8B64F068F77B7FC965410E0'  // 需要的值
            },
            filePath: item,
            success: res => {
            // 把图片插入到富文本
              that.editorCtx.insertImage({
                src: JSON.parse(res.data).data.url,
                data: {
                  id: 'abcd',
                  role: 'god'
                },
                width: '80%',
                success: function () {
                  console.log('insert image success')
                }
              })
            },
            fail: err1 => {
              console.log(err1, '是比啊了');
            }
          })
        })


      },
      fail: err => {
        console.log(err, '你失败了');
      }
    })
  }

四、兼容pc端 示例中的代码只适合手机端 所以模拟器上没法使用

原理:示例中只区分了ios 和安卓 并且keyboardHeight 时不显示工具栏 这里pc被当成了安卓 所以不显示

解决: 1、区分pc和手机端 2、pc端的工具栏一般放在顶部

js 复制代码
 // 区分手机端和pc端
 const platform = wx.getSystemInfoSync().platform
    this.setData({
      isPC: platform == 'windows' || platform == 'mac' || platform == 'devtools' ? true : false
    })
html 复制代码
// 自己研读isPC的功能
<view class="container" style="height:{{editorHeight}}px;top: {{isPC?'50px':''}};">
  <editor id="editor" class="ql-container" placeholder="{{placeholder}}" bindstatuschange="onStatusChange" bindready="onEditorReady" bindinput='editorIps' read-only="{{readOnly}}">
  </editor>
</view>
<!-- 手机端的工具栏 -->
<view class="toolbar" catchtouchend="format" hidden="{{keyboardHeight > 0 ? false : true}}" style="bottom: {{isIOS ? keyboardHeight : 0}}px" wx:if="{{!isPC}}">
  <i class="iconfont icon-charutupian" catchtouchend="insertImage"></i>
  <i class="iconfont icon-format-header-2 {{formats.header === 2 ? 'ql-active' : ''}}" data-name="header" data-value="{{2}}"></i>
  <i class="iconfont icon-format-header-3 {{formats.header === 3 ? 'ql-active' : ''}}" data-name="header" data-value="{{3}}"></i>
  <i class="iconfont icon-zitijiacu {{formats.bold ? 'ql-active' : ''}}" data-name="bold"></i>
  <i class="iconfont icon-zitixieti {{formats.italic ? 'ql-active' : ''}}" data-name="italic"></i>
  <i class="iconfont icon-zitixiahuaxian {{formats.underline ? 'ql-active' : ''}}" data-name="underline"></i>
  <i class="iconfont icon--checklist" data-name="list" data-value="check"></i>
  <i class="iconfont icon-youxupailie {{formats.list === 'ordered' ? 'ql-active' : ''}}" data-name="list" data-value="ordered"></i>
  <i class="iconfont icon-wuxupailie {{formats.list === 'bullet' ? 'ql-active' : ''}}" data-name="list" data-value="bullet"></i>
</view>

<!-- pc端的工具栏 去掉了hidden属性 及让工具栏位于顶部 -->
<view class="toolbar" catchtouchend="format" style="top:0" wx:if="{{isPC}}">
  <i class="iconfont icon-charutupian" catchtouchend="insertImage"></i>
  <i class="iconfont icon-format-header-2 {{formats.header === 2 ? 'ql-active' : ''}}" data-name="header" data-value="{{2}}"></i>
  <i class="iconfont icon-format-header-3 {{formats.header === 3 ? 'ql-active' : ''}}" data-name="header" data-value="{{3}}"></i>
  <i class="iconfont icon-zitijiacu {{formats.bold ? 'ql-active' : ''}}" data-name="bold"></i>
  <i class="iconfont icon-zitixieti {{formats.italic ? 'ql-active' : ''}}" data-name="italic"></i>
  <i class="iconfont icon-zitixiahuaxian {{formats.underline ? 'ql-active' : ''}}" data-name="underline"></i>
  <i class="iconfont icon--checklist" data-name="list" data-value="check"></i>
  <i class="iconfont icon-youxupailie {{formats.list === 'ordered' ? 'ql-active' : ''}}" data-name="list" data-value="ordered"></i>
  <i class="iconfont icon-wuxupailie {{formats.list === 'bullet' ? 'ql-active' : ''}}" data-name="list" data-value="bullet"></i>
</view>

五、editor bindinput事件为关键事件 用于获取实时数据

html 复制代码
  <editor id="editor" class="ql-container" placeholder="{{placeholder}}"  bindinput='editorIps' read-only="{{readOnly}}">
  </editor>
js 复制代码
 editorIps(e) {
    this.setData({
      editorDetail: e.detail.html,
    })
相关推荐
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于微信小程序的农商新闻网为例,包含答辩的问题和答案
微信小程序·小程序
小光学长3 小时前
基于微信小程序的家具商城系统g80l9675(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·微信小程序·小程序
云起SAAS4 小时前
1V1七彩测评抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·1v1七彩测评
sheji34164 小时前
【开题答辩全过程】以 基于微信小程序的签到系统的设计与实现为例,包含答辩的问题和答案
微信小程序·小程序
星轨初途4 小时前
C++入门(算法竞赛类)
c++·经验分享·笔记·算法
prog_61034 小时前
【笔记】和各大AI语言模型写项目——手搓SDN后得到的经验
人工智能·笔记·语言模型
星轨初途5 小时前
C++的输入输出(上)(算法竞赛类)
开发语言·c++·经验分享·笔记·算法
说私域6 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群运营创新研究
人工智能·小程序·开源
chinrock6 小时前
如何抓包飞书小程序-飞书开发者工具
小程序·飞书
再睡一夏就好6 小时前
string.h头文件中strcpy、memset等常见函数的使用介绍与模拟实现
c语言·c++·笔记·string·内存函数·strcpy