1. 程式人生 > >layui富文字編輯器layedit增加上傳視訊與音訊功能

layui富文字編輯器layedit增加上傳視訊與音訊功能

改動效果:
在這裡插入圖片描述

layui2.4.3並沒有視訊、音訊等上傳功能,不過還好,目前有一個基於layui2.4.3的layedit擴充套件,增加了視訊上傳、字型顏色等等。

首先去下載一個layedit擴充套件檔案:中轉站
根據說明替換layedit.js,直接呼叫就會出現上面的效果,注意,編輯器中點選html會出錯,那是因為少引入了一個ace,js,需要擴充套件檔案中的Content/ace/ace.js,把Content資料夾貼上到專案中layui目錄下,然後在呼叫的介面引入ace.js即可。

...
 <body>
        <script src="/public/layui/layui.js"></script>
        <script src="/public/layui/lay/modules/Content/ace/ace.js"></script>
   		<textarea id="demo" style="display: none;"></textarea>
		<script type="text/javascript">
			layui.use('layedit', function(){
				  var layedit = layui.layedit;
				  layedit.build('demo',{
					  tool: [
			                    'html', 'code', 'strong', 'italic', 'underline', 'del', 'addhr', '|', 'fontFomatt', 'colorpicker', 'face'
			                    , '|', 'left', 'center', 'right', '|', 'link', 'unlink', 'image_alt', 'video', 'anchors'
			                    , '|', 'fullScreen'
			                ],
                         uploadImage: {
                             url: '/admin/base/upload'
                         },
                         uploadVideo: {
                        	 url: '/admin/base/upload',
                             accept: 'video',
                             acceptMime: 'video/*',
                             exts: 'mp4|flv|avi|rm|rmvb'
                         }
				  }); //建立編輯器
				  
				});
		</script>       
    </body>
...

現在雖然有視訊了,但是專案還缺少音訊,去網上查了一下,有那麼零星的幾個人去改原始碼實現,雖然把程式碼貼了出來,但是不知版本還是怎麼實在看不懂,程式碼完全對不上,沒辦法,只有自己動手了。

同樣是改原始碼的思路,首先檢視layedit.js中檢視上傳視訊的程式碼,試想加入流程,發現有三處程式碼塊的邏輯,如果新增音訊,那麼就只新增這三處的程式碼塊。

按步驟應當是:
1、增加標籤
搜尋video查詢下方程式碼
在這裡插入圖片描述
增加一個audio標籤

//注意,如果複製的video需要把標籤中的內容去掉,i標籤樣式修改layui-icon-headset,否則會造成樣式錯亂
audio: '<i class="layui-icon layui-icon-headset" title="插入音訊" layedit-event="audio" style="font-size:18px"></i>'

2、增加config配置
搜尋uploadVideo查詢下方程式碼:
在這裡插入圖片描述
增加程式碼:

uploadAudio: {
            	url: "",
            	accept: "audio",
            	acceptMime: "audio/*",
            	exts: "mp3|m4a|wma|amr|ape|flac|aac",
            	size: "20480"
            },

3增加上傳音訊處理函式:
搜尋video:查詢程式碼:
在這裡插入圖片描述
加入相同格式的函式:

audio: function(n) {
			i.open({
				type: 1,
				id: "fly-jie-audio-upload",
				title: "音訊",
				shade: !1,
				area: "600px",
				offset: "100px",
				skin: "layui-layer-border",
				content: ['<ul class="layui-form layui-form-pane" style="margin: 20px;">', '<li class="layui-form-item">', '<button type="button" class="layui-btn" id="LayEdit_InsertAudio"> <i class="layui-icon"></i>上傳音訊</button>', '<input type="text" name="audio" placeholder="請選擇檔案" style="width: 79%;position: relative;float: right;" class="layui-input">', "</li>",  '<li class="layui-form-item" style="text-align: center;">', '<button type="button" lay-submit  class="layui-btn layedit-btn-yes"> 確定 </button>', '<button style="margin-left: 20px;" type="button" class="layui-btn layui-btn-primary"> 取消 </button>', "</li>", "</ul>"].join(""),
				success: function(l, o) {
					layui.use("upload",
					function(s) {
						var r, c = l.find('input[name="audio"]'),
						s = layui.upload,
						f = a.uploadAudio || {};
						s.render({
							elem: "#LayEdit_InsertAudio",
							url: f.url,
							accept: f.accept,
							acceptMime: f.acceptMime,
							exts: f.exts,
							size: f.size,
							before: function(t) {
								r = i.msg("檔案上傳中,請稍等哦", {
									icon: 16,
									shade: .3,
									time: 0
								})
							},
							done: function(t, e, n) {
								if (i.close(r), 0 == t.code) t.data = t.data || {},
								c.val(t.data.src);
								else var a = i.open({
									type: 1,
									anim: 2,
									icon: 5,
									title: "提示",
									area: ["390px", "260px"],
									offset: "t",
									content: t.msg + "<div><audio src='" + t.data.src + "' controls='controls'/></div>確定使用該檔案嗎?",
									btn: ["確定", "取消"],
									yes: function() {
										t.data = t.data || {},
										c.val(t.data.src),
										i.close(a)
									},
									btn2: function() {
										i.close(a)
									}
								})
							}
						}),
						l.find(".layui-btn-primary").on("click",
						function() {
							i.close(o)
						}),
						l.find(".layedit-btn-yes").on("click",
						function() {
							var a = y(n);
							e(a).parent();
							h.call(t, "p", {
								text: '&nbsp;<audio src="' + c.val() + '" controls="controls" >您的瀏覽器不支援audio播放</audio>&nbsp;'
							},
							n),
							i.close(o)
						})
					})
				}
			})
	},

到此步驟就算在layedit.js檔案增加了一個上傳音訊處理的功能,接下來就是呼叫了

layedit.build('demo',{
					  tool: [
			                    'html', 'code', 'strong', 'italic', 'underline', 'del', 'addhr', '|', 'fontFomatt', 'colorpicker', 'face'
			                    , '|', 'left', 'center', 'right', '|', 'link', 'unlink', 'image_alt','audio', 'video', 'anchors'
			                    , '|', 'fullScreen'
			                ],
                         uploadImage: {
                             url: '/admin/base/upload'
                         },
                         uploadVideo: {
                        	 url: '/admin/base/upload',
                             accept: 'video',
                             acceptMime: 'video/*',
                             exts: 'mp4|flv|avi|rm|rmvb'
                         },
                         uploadAudio: {
                        	 url: '/admin/base/upload',
                             accept: 'audio',
                             acceptMime: 'audio/*',
                             exts: 'mp3|m4a|wma|amr|ape|flac|aac'
                         }
				  });
				  //這有一個提示語的問題,如果把uploadAudio引數中url下方的三個配置項註釋掉,那麼再選擇除去音訊之外的檔案會報“選擇的圖片中包含不支援的格式”,這樣的效果並不好,所以加上這三項等於把其他檔案遮蔽掉了,這樣使用者只能選擇音訊檔案。同理,視訊也是如此。