Adinnet-Web Adinnet-Web
首页
  • 技术沉淀

    • 技术沉淀
  • 前端文章

    • JavaScript
  • 前端笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 实用技巧
收藏
  • 分类
  • 标签
  • 归档
首页
  • 技术沉淀

    • 技术沉淀
  • 前端文章

    • JavaScript
  • 前端笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 实用技巧
收藏
  • 分类
  • 标签
  • 归档
  • JavaScript文章

  • 学习笔记

  • 技术沉淀

    • CSS矩形绘制
    • 仿微信通讯录
    • 微信小程序订阅消息
    • 保存海报
    • 微信小程序页面弹框
    • 微信小程序在指定距离范围内签到
    • h5嵌套u3d,使用iframe进行交互
    • 前端主导文件处理方法
    • 图片压缩方法封装
    • 金额大写函数
    • 前端主导的小程序一键导航功能
    • uniapp富文本组件(只支持H5)
      • uniapp二次确认弹框组件(依赖于uview)
      • 无缝滚动插件(vue3)
      • H5与unity通信(只针对unity嵌套H5)
      • 辅助触控
      • 关系图
      • h5&svg点赞动效
      • iframe高精地图文件预览
      • 自适应横向瀑布流布局
      • 考试功能
      • 仿小说翻页
      • 富文本
      • h5唤醒App
      • vue3 Count-to数字翻动
      • 小程序图片转base64
      • 第三方应用跳转微信小程序
      • 圆角TabBar
      • 大屏Header
      • Echarts中国地图
      • 使用computed拦截v-model
      • 消息订阅与发布
      • Html相对路径页面跳转
      • Vite打包本地访问
      • H5主题切换
      • 移动端列表分页
      • 每次进入页面都触发的功能(v3)
      • 智能导诊
      • js中几个优雅的运算符使用技巧
      • 其他CSS伪元素
      • 微信浏览器保存canvas海报
      • uniappH5手动拖拽缩放自定义绘制海报
      • uniapp小程序盒子拖拽排序
      • 微信小程序地图的使用
      • css静态漏斗绘制
      • 微信小程序图片流处理
      • ios时间问题
      • 文字围绕效果
      • 表格树动态计算
      • React中useEffect用法
      • React Hooks 陷阱
      • Naive UI修改默认样式
      • vue 根据div id 滚动到指定view到可视视图中
      • js将[1,2,3]排列组合成[1.12.123]
      • 移动端如何加载vite导出dist包
      • TS探索接口、泛型和自定义类型
      • WebSocket中加入Token
      • 幂方程指数衰减
      • pageSpy
      • 表格多条件搜索
      • axios get 请求 url 转码 空格转成+,导致请求失败
      • NaiveUI使用Message组件遇到的问题记录
      • 小程序多盒子拖拽排序
      • 对象快速筛key方法
      • 倒计时
      • nuxt3中的useAsyncData使用详解
      • nuxt3文件式路由
      • 播放amr格式音频
      • echarts瀑布图
      • vue中使用vueuse进行文件导出
      • 分享一个数据整理方法
      • naiveui表格shift多选
      • 数组递归转tree
      • 自定义指令图片懒加载
      • 将数组里面的对象转换成我们需要的键值对
      • 亚马逊云s3上传
      • 上拉加载更多封装
      • JS设计模式总结笔记
      • 适配移动端页面顶部安全区域
      • 【CryptoJS】使用介绍
      • 微信小程序富文本图片点击放大
      • 微信小程序省市区级联选择
      • uniapp拖动排序插件
      • element ui 的树形结构懒加载,局部更新
      • 表单搜索过滤空值
      • 判断设备类型
      • tsconfig配置打包问题
      • vant-uploader上传组件添加长按保存图片
      • BroadcastChannel跨页面通信
      • pnpm安装问题
      • echart阶梯图形绘制
      • js根据对象拼接参数
      • 集成免密登录
      • 输入框输入数字限制
      • js控制全局css变量
      • 流程图
      • 修改npm包
      • tsx在vue3中的应用
      • 109video播放视频流
      • echart默认展示某个点的tooltip
      • 大屏适配几种方案
      • 表单低代码自定义列表页
      • 表单低代码列表页配置端代码
      • 低代码平台使用的一些好用的js方法
      • vue3cookie的使用
      • 原生js下载文件
      • stompjs 创建socket,断线重连机制
      • iframe作为内嵌网页cookie设置
      • 前端对文件内容解析生成特定算法哈希值方法
      • vue3中前端自定义命名文件名称下载文件的方法
      • 前端项目中权限判断的方法配合路由守卫使用
      • 原生table:表格table中thead固定,tbody超出高度出现滚动条
      • vue中使用原生的方法
      • vue3中amchart的初步使用
      • base64图片加水印
      • 手写签名
      • base64转doc文件
    • 前端
    • 技术沉淀
    商会林
    2023-07-07
    目录

    uniapp富文本组件(只支持H5)

    # 效果图

    Alt text

    # 属性

    • count 类型Number 控制选择图片的数量 (默认 6)
    • @uploadFile 选择图片的回调
    • this.$refs.KekeEditor.editor_setContents(detail) 设置富文本内容方法 detail为内容
    • let detail = await this.$refs.KekeEditor.editor_getcontents() 获取富文本内容方法 detail为获取到的内容(建议使用 async await)

    # 使用方法

    1. 引入
    import KekeEditor from "@/components/KekeEditor/KekeEditor.vue"
    
    1
    1. 注册组件
    components: {
    	KekeEditor,
    },
    
    1
    2
    3
    1. 应用
    <KekeEditor ref="KekeEditor" @uploadFile="uploadFile" :count="6"></KekeEditor>
    <button @click="get_content">获取内容</button>
    <button @click="set_content">设置内容</button>
    
    1
    2
    3
    data() {
    	return {
    		detail: "<p>Rboy 设置的内容</p>"
    	};
    },
    methods: {
    	// 设置内容
    	async set_content() {
    		this.$refs.KekeEditor.editor_setContents(this.detail)
    	},
    	// 获取内容
    	async get_content() {
    		let detail = await this.$refs.KekeEditor.editor_getcontents()
    		console.log(detail)
    	},
    	// 上传图片
    	async uploadFile(event) {
    		// event 选择的图片
    		for (var item in event.file) {
    			// uploadFileApi  为上传到服务端的接口 count大于1 使用 await 
    			let src = await uploadFileApi(event.file[item])
    			// src.url 是服务端返回的图片地址
    			// this.$refs.KekeEditor(Object) 方法是往富文本设置图片内容  src 图片地址
    			this.$refs.KekeEditor.editor_insertImage({
    				src: src.url,
    				alt: "混合图",
    			})
    		}
    	},
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    1. 源码(KekeEditor.vue)
    <template>
    	<div>
    		<view class="fu_box">
    			<editor id="editor" :show-img-toolbar="true" :show-img-resize="true" :show-img-size="true"
    			    @input="getLength"
    				:placeholder="placeholder"></editor>
    		</view>
    		<view class="icons_box">
    			<text class="iconfont icon-zuoduiqi" @click="editor_format_btn('align','left')"></text>
    			<text class="iconfont icon-juzhongduiqi" @click="editor_format_btn('align','center')"></text>
    			<text class="iconfont icon-youduiqi" @click="editor_format_btn('align','right')"></text>
    			<text class="iconfont icon-zuoyouduiqi" @click="editor_format_btn('align','justify')">
    			</text>
    			<text class="iconfont icon-zitijiacu" @click="editor_format_btn('bold')"></text>
    			<text class="iconfont icon-zitixieti" @click="editor_format_btn('italic')"></text>
    			<text class="iconfont icon-charutupian" @click="$refs.uploadImg.chooseFile()"></text>
    			<u-upload
    			  ref="uploadImg"
    			  style="display: none;"
    		      @afterRead="editor_img_btn"
    		      name="1"
    		      multiple
    		      :maxCount="1"
    	        ></u-upload>
    		</view>
    	</div>
    </template>
    
    <script>
    	export default {
    		name: "KekeEditor",
    		props: {
    			count: {
    				type: Number,
    				default: 6
    			},
    			placeholder: {
    				type: String,
    				default: '请输入...'
    			}
    		},
    		data() {
    			return {
    				editorCtx: ''
    			}
    		},
    		created() {
    
    		},
    		mounted() {
    			// #ifdef APP-PLUS || H5 ||MP-WEIXIN
    			uni.createSelectorQuery().in(this).select('#editor').context((res2) => {
    				this.editorCtx = res2.context
    			}).exec()
    			// #endif
    		},
    		methods: {
    			// 获取内容
    			editor_getcontents() {
    				return new Promise((resove, reject) => {
    					this.editorCtx.getContents({
    						success: (res) => {
    							resove(res.html)
    						}
    					})
    				})
    			},
    			// 设置内容
    			editor_setContents(text = "") {
    				this.editorCtx.setContents({
    					html: text //this.EditGoodsDetail.content为赋值内容。    
    				})
    			},
    			// 设置属性
    			editor_format_btn(name, value) {
    				this.editorCtx.format(name, value)
    			},
    			// 设置图片
    			editor_insertImage(data) {
    				if (!data) return false
    				this.editorCtx.insertImage(data)
    			},
    			// 上传图片
    			editor_img_btn(e) {
    				this.$emit("uploadFile", e.file)
    			},
    			// 获取内容字数
    			getLength(e) {
    				if (e.detail.text) {
    				  this.$emit('getWordLength', (e.detail.text.length - 1))
    				} else {
    					this.$emit('getWordLength', 0)
    				}
    			}
    		}
    	}
    </script>
    
    <style scoped lang="scss">
    	@import './editor-icon.css';
    	/deep/.ql-editor.ql-blank:before {
    	  font-style: normal;
        }
    	.icons_box {
    		margin-bottom: 15rpx;
    		text-align: right;
    		.iconfont {
    			margin: 5rpx 10rpx;
    		}
    	}
    	.fu_box {
    		min-height: 35px !important;
    		font-size: 28rpx;
    		width: 100%;
    		box-sizing: border-box;
    		text-align: left;
    		color: #333;
    		padding: 7px;
    		editor {
    			width: 100%;
    		}
    	}
    	
    </style>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    上次更新: 2023/07/07, 17:17:48
    前端主导的小程序一键导航功能
    uniapp二次确认弹框组件(依赖于uview)

    ← 前端主导的小程序一键导航功能 uniapp二次确认弹框组件(依赖于uview)→

    最近更新
    01
    base64转doc文件
    01-03
    02
    手写签名
    01-03
    03
    base64图片加水印
    01-03
    更多文章>
    Theme by Vdoing | Copyright © 2023-2025 Adinnet
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式