微信小程序使用editor富文本编辑器 以及回显 全屏弹窗的模式

 

  <!--富文本接收的位置-->
  <view class="white-box">
    <view class="title">
      <view class="yellow-fence"></view>
      <view class="v1">教研记录</view>
    </view>
    <view class="add-btn" bindtap="addRecords">添加新的教研记录</view>
    <view wx:for="{{records}}" class="rich-text-box" wx:key="index">
      <!-- <mp-html content="{{item}}" selectable="true" show-img-menu="true" /> -->
      <rich-text nodes="{{item}}" data-index="{{index}}" bindtap="echoRecordsData"></rich-text>
    </view>
  </view>

  <view class="white-box">
    <view class="title">
      <view class="yellow-fence"></view>
      <view class="v1">研究成果</view>
    </view>
    <view class="add-btn" bindtap="addAchievement">添加研究成果说明</view>
    <view wx:for="{{achievement}}" class="rich-text-box" wx:key="index">
      <!-- <mp-html content="{{item}}" selectable="true" show-img-menu="true" /> -->
      <rich-text nodes="{{item}}" data-index="{{index}}" bindtap="echoAchievementData"></rich-text>
    </view>
  </view>

以上是富文本的值返回接收的地方 下面是富文本的html

  <!--富文本编辑器弹窗-->
  <view class="container" style="height:100vh;" wx:if="{{showEidter}}">
    <view class="save-box">
      <view class="v1" bindtap="cancelEidter">取消</view>
      <view class="v2" bindtap="saveEditer">确定</view>
    </view>
    <editor id="editor" class="ql-container" placeholder="{{placeholder}}" bindstatuschange="onStatusChange" bindready="onEditorReady" bindfocus="onFocus" bindinput="onBlur">
    </editor>
    <view class="toolbar" catchtouchend="format">
      <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>
  </view>
Page({
  data: {
    /*富文本-start*/
    formats: {},
    readOnly: false,
    placeholder: '开始输入...',
    isClickImg: false,

    records: [], //教研记录列表    
    isRecordsEidt: false, //是否编辑的是教研记录
    recordsEidtIndex: null, //教研记录编辑的是哪一条

    achievement: [], //研究成果列表
    isAchievementEidt: false, //是否编辑的是研究成果
    achievementEidtIndex: null, //研究成果编辑的是哪一条

    showEidter: false,
    editData: '',
    /*富文本-end*/    
  },

  onLoad(options) {},

  /*富文本编辑器-start*/
  //编辑教研记录列表
  echoRecordsData(e) {
    const that = this
    let oidx = e.currentTarget.dataset.index
    this.setData({
      isRecordsEidt: true,
      showEidter: true,
      recordsEidtIndex: oidx,

      isAchievementEidt: false, //是否编辑的是研究成果
      achievementEidtIndex: null, //研究成果编辑的是哪一条
    })
    //console.log(that.data.records[oidx])
    // 修改时,反显数据
    this.createSelectorQuery().select("#editor")
      .context((res) => {
        res.context.setContents({
          html: that.data.records[oidx],
        });
      })
      .exec();
  },
  echoAchievementData(e) {
    const that = this
    let oidx = e.currentTarget.dataset.index
    this.setData({
      isAchievementEidt: true,
      showEidter: true,
      achievementEidtIndex: oidx,

      isRecordsEidt: false, //是否编辑的是教研记录
      recordsEidtIndex: null, //教研记录编辑的是哪一条
    })
    //console.log(that.data.records[oidx])
    // 修改时,反显数据
    this.createSelectorQuery().select("#editor")
      .context((res) => {
        res.context.setContents({
          html: that.data.achievement[oidx],
        });
      })
      .exec();
  },
  //重置
  cancelEidter() {
    this.setData({
      isRecordsEidt: false,
      showEidter: false,
      recordsEidtIndex: null,
      isAchievementEidt: false,
      achievementEidtIndex: null,
      editData: ''
    })
  },
  saveEditer() {
    //如果是教研记录新增
    let recordsEidtIndex = this.data.recordsEidtIndex
    let achievementEidtIndex = this.data.achievementEidtIndex
    if (this.data.isRecordsEidt) {
      let odata = this.data.records
      if (recordsEidtIndex || recordsEidtIndex === 0) {
        //编辑
        odata[recordsEidtIndex] = this.data.editData
      } else {
        //新增
        odata.push(this.data.editData)
      }
      this.setData({
        records: odata
      })
      //console.log(this.data.records)
      this.cancelEidter()
    } else if (this.data.isAchievementEidt || achievementEidtIndex === 0) {
      let odata = this.data.achievement
      if (achievementEidtIndex) {
        //编辑
        odata[achievementEidtIndex] = this.data.editData
      } else {
        //新增
        odata.push(this.data.editData)
      }
      this.setData({
        achievement: odata
      })
      //console.log(this.data.records)
      this.cancelEidter()
    }
  },

  addRecords() {
    this.setData({
      isRecordsEidt: true,
      showEidter: true
    })
  },
  addAchievement() {
    this.setData({
      isAchievementEidt: true,
      showEidter: true
    })
  },
  readOnlyChange() {
    this.setData({
      readOnly: !this.data.readOnly
    })
  },

  onEditorReady() {
    const that = this
    wx.createSelectorQuery().select('#editor').context(function (res) {
      //console.log(res)
      if (res.context) {
        that.editorCtx = res.context
      }
    }).exec()
  },
  format(e) {
    let {
      name,
      value
    } = e.target.dataset
    if (!name) return
    // console.log('format', name, value)
    this.editorCtx.format(name, value)
  },
  onStatusChange(e) {
    const formats = e.detail
    this.setData({
      formats
    })
  },
  insertDivider() {
    this.editorCtx.insertDivider({
      success: function () {
        console.log('insert divider success')
      }
    })
  },
  clear() {
    this.editorCtx.clear({
      success: function (res) {
        console.log("clear success")
      }
    })
  },
  removeFormat() {
    this.editorCtx.removeFormat()
  },
  insertDate() {
    const date = new Date()
    const formatDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`
    this.editorCtx.insertText({
      text: formatDate
    })
  },
  insertImage() {
    this.setData({
      isClickImg: true
    })
    const that = this
    wx.chooseImage({
      count: 1,
      success: function (res) {
        that.editorCtx.insertImage({
          src: res.tempFilePaths[0],
          data: {
            id: 'abcd',
            role: 'god'
          },
          width: '80%',
          success: function () {
            console.log('insert image success')
          }
        })
      }
    })
  },
  onFocus() {
    this.setData({
      isClickImg: false
    })
  },
  onBlur(e) {
    //console.log(this.data.isClickImg)
    //防止上传的图片直接失焦 保存内容的问题    
    if (!this.data.isClickImg) {
      //console.log(e.detail.html)
      this.setData({
        editData: e.detail.html
      })
    }
    //this.oneEditor.blur()
  },
  /*富文本编辑器-end*/
  
})
/*富文本编辑器-start*/
.container {
  position: fixed; 
  top: 0; 
  right: 0;
  bottom: 0;
  left: 0; 
  z-index: 999;  
  display: flex;
  flex-direction: column;
  background: #fff;
}
.ql-container {
  flex: 1;
  padding: 10px 10px 50px 10px;
  box-sizing: border-box;
  font-size: 16px;
  line-height: 1.5;
}

.ql-active {
  color: #22C704;
}

.iconfont {
  display: inline-block;
  width: 30px;
  height: 30px;
  cursor: pointer;
  font-size: 20px;
}

.toolbar {
  position: fixed;
  left: 0;
  right: 100%;
  bottom: 0;
  padding: 0 10px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  height: 50px;  
  box-sizing: border-box;    
  background: #fff;
  border-top: 1rpx solid #f2f2f2;
}
.save-box{ margin: 10rpx 10rpx 0 0; display: flex; justify-content: flex-end;}
.save-box .v1,.save-box .v2{ font-size: 28rpx; width: 100rpx; height: 60rpx; text-align: center; line-height: 60rpx; border-radius: 12rpx;}
.save-box .v1{ margin-right: 10rpx; background: #ddd; color: #fff;}
.save-box .v2{ background: #ffb81c; color: #fff;}
.rich-text-box{ margin-bottom: 20rpx;}
/*富文本编辑器-end*/

记录一下使用方法 也可以参考一下怎么使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/56733.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hbase pe 压测 OOM问题解决

说明&#xff1a;本人使用CDH虚拟机搭建了Hbase集群&#xff0c;但是在压测的时发现线程多个的时候直接回OOM,记录一下 执行命令 hbase pe --nomapred --oneContrue --tablerw_test_1 --rows1000 --valueSize100 --compressSNAPPY --presplit10 --autoFlushtrue randomWrite …

BPMNJS插件使用及汉化(Activiti绘制流程图插件)

BPMNJS插件运行最重要的就是需要安装nodejs插件,这不一定要安装和测试好。 主要是使用npm命令 1、配置BPMNJS插件绘制activiti7工作流 1.1、安装和配置nodejs 插件 1.1.1、下载nodejs 下载地址:https://nodejs.org/en 1.1.2、安装nodejs,傻瓜式安装 安装之后在安装…

74HC245芯片的用途

双 P 沟道增强型 MOS 管---D74HC245 目录 双 P 沟道增强型 MOS 管---D74HC245 概述与特点 主要特性 应用领域 管脚定义 管脚定义说明 逻辑框图 直流电气参数 直流特性 交流特性 封装 概述与特点 &#xfffd; 概述 D74HC245 是一种三态输出、八路信号收发器,主要应用…

流控平台Sentinel搭建和接入教程

流量控制和限流是大型系统必不可少的组成部分&#xff0c;Sentinel是Alibaba提供的一款特别好用的专业工具&#xff0c;属于那种看起来很牛&#xff0c;用起来也很牛的工具&#xff0c;下面记录一下接入的过程。 一&#xff0c;搭建平台 1&#xff0c;下载jar包 地址&#x…

分享学习java过程中遇到的一些网址

*****JavaWeb视频教程***** https://www.bilibili.com/video/BV1m84y1w7Tb?p4&spm_id_frompageDriver&vd_source841fee104972680a6cac4dbdbf144b50*****Java前端官网教程&#xff08;HTML、CSS、JS)***** https://www.w3school.com.cn/html/index.asp*****VS Code官网…

2023年智能优化算法---能量谷优化器 Energy valley optimizer(EVO),附MATLAB代码和文献...

简介 能量谷优化器(EVO)是一种新的元启发式算法&#xff0c;它的算法是受到了关于稳定性和不同粒子衰变模式的先进物理原理的启发。在文献中&#xff0c;作者与CEC函数中最先进的算法进行了比较&#xff0c;并且证明该算法确实很强劲。算法原理大家请参考文献。 01 结果展示 在…

分布式软件架构——内容分发网络

内容分发网络&#xff08;CDN&#xff0c;Content Distribution Network或Content Delivery Network&#xff09; 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现…

修改el-select或者el-input样式失效

下午改el-input和el-select这两个的样式真的烦&#xff0c;&#xff0c;&#xff0c;还不如写原生标签了。。 样式使用的是sass 我已经在样式器中挨着挨着去找了&#xff0c;把层级的类都写下来了 .select-wraper{//下拉框.el-select{.el-input .el-input__wrapper{backgrou…

【Ajax】笔记-原生jsonp跨域请求案例

原生jsonp跨域请求 输入框&#xff1a;输入后&#xff0c;鼠标移开向服务端发送请求&#xff0c;返回用户不存在(直接返回不存在&#xff0c;不做判断) JS <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><me…

css图标 | 来自 fontawesome 字体文件的586 个小图标

1. css效果 /*!* Font Awesome 4.4.0 by davegandy - http://fontawesome.io - fontawesome* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)*/.fa-glass:before {content:"\f000"} .fa-music:before {content:"\f001"…

maven如何打包你会吗?

1.新建一个maven项目&#xff0c;在main/java中建立Main类 public class Main {public static void main(String[] args) {System.out.println("hello java ...");} } 2.添加依赖&#xff0c;使其成为可执行包 <build><plugins><!--打包成为可执行包-…

TPlink DDNS 内网穿透?外网访问设置方法

有很多小伙伴都想知道&#xff1a;TPlink路由器怎么设置DDNS内网穿透&#xff1f;今天&#xff0c;小编就给大家分享一下TPlink DDNS 外网访问设置方法&#xff0c;下面是图文教程&#xff0c;帮助新手快速入门DDNS设置。 本文介绍的是云路由器TP-LINK DDNS的设置方法。TP-LIN…

FPGA开发:音乐播放器

FPGA开发板上的蜂鸣器可以用来播放音乐&#xff0c;只需要控制蜂鸣器信号的方波频率、占空比和持续时间即可。 1、简谱原理 简谱上的4/4表示该简谱以4分音符为一拍&#xff0c;每小节4拍&#xff0c;简谱上应该也会标注每分钟多少拍。音符时值对照表如下图所示&#xff0c;这表…

Babel编译与Webpack

目录 Babel初识BabelBabel 使用方式使用 Babel 前的准备工作 WebpackWebpack介绍Webpack初体验Webpack核心概念入口&#xff08;entry&#xff09;出口&#xff08;output&#xff09;加载 (loader)插件&#xff08;plugins&#xff09; Babel Babel官网: https://babeljs.io/…

Emacs之编译系统文件cc-mode.el.gz(一百二十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

应用层协议——https

文章目录 1. HTTPS 是什么2. 什么是"加密"3. 常见的加密方式4. 数据摘要 && 数字签名5. HTTPS 的工作过程探究5.1 方案1 - 只使用对称加密5.2 方案2 - 只使用非对称加密5.3 方案3 - 双方都使用非对称加密5.4 方案4 - 非对称加密 对称加密5.5 中间人攻击5.6 …

pycharm 使用远程服务器 jupyter (本地jupyter同理)

1. 远程服务器miniconda 环境中创建jupyter环境 # 1. 激活环境 conda activate envname#2. 在环境中安装jupyter pip install jupyter # 或者 conda install jupyter#3. 生成jupyter_notebook_config.py文件 jupyter notebook --generate-config#4. 设置密码 jupyter noteboo…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)【二】

文章目录 SSM--基础环境搭建【二】项目介绍项目功能/界面● SSM 整合项目界面 项目全局配置web.xmlSpringMVC 配置 SSM–基础环境搭建【二】 项目介绍 项目功能/界面 ● SSM 整合项目界面 项目全局配置web.xml 配置furns_ssm\src\main\webapp\WEB-INF\web.xml , 和项目全局…

mac安装nacos,M1芯片

第一步&#xff0c;官网下载 》nacos官网 去github中下载对应的版本&#xff0c;本人下载的是1.4.1版本 在这儿选择其他的版本&#xff0c;下面这里选择 tar.gz 压缩包 解压后放到一个非中文的目录下&#xff0c;我选择在 user目录下面创建一个other目录&#xff0c;将使用的环…

TCP拥塞控制详解 | 1. 概述

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …