记录:uni运行H5使用原生video标签、富文本查看图片等

记录一下第一次遇到的一些问题:

1.由于uniapp运行到h5中,video标签将被uni转译成uni-video标签,而uni-video标签在h5中有很多无法使用的属性 例如:无法显示静音按钮,无法使用倍速、画中画等;但原生的video是可以的。于是第一步先到处查阅资料看有没有什么插件可供h5使用并且显示静音按钮等完善的功能,在不懈努力下找到了一个x-video插件,但兼容的不够完善,被弃用;后又使用了video.js来完善,但静音按钮、进度条等样式太“原始化”了,不太雅观,又被弃用;中途还使用了很多类似于“x5-video-player-type="h5" ”的这种属性 ,但是也毫无作用,因为根本不是原生的video标签(内心os:心已死) ;最后终于在使用富文本的时候,突然发现可以自定义template作为富文本,再供盒子使用!(为什么没有早点想到,感觉脑子很木) 

//关于uniapp中想使用原生h5标签
	let template =
		`<video style="max-width: 100%;" controls>
				<source src=${data.video} type='video/mp4'>
				<source src=${data.video} type="video/ogg">
				您的浏览器不支持Video标签。
		</video>`
	this.videoSrc = template;

2. 富文本查看图片 相关代码:

<template>
	<view class="show-content previewImg" v-html="article" v-if="article"
			    @click.stop="previewImg($event,article)"></view>
</template>

export default {
		data() {
			return {
				// 富文本内容
				article: '',
			}
		},
	onLoad(options) {
			this.getInfo(options.id);
		},
		methods: {
            // 获取富文本图片预览当前下标 item当前的富文本内容 indexs当前项的下标
			previewImg(event, item) {
				// console.log(event, item, '---点击');
				let imgs = item.match(/<img[^>]+>/g); //把img所有节点的图片选择出来
				if (imgs) {
				var imgArr = []; //保存图片路径
				//对图片进行处理从而获取路径
			for (var j = 0; j < imgs.length; j++) {
				imgs[j].replace(/<img[^>]*src=['"]([^'"]+)[^>]*>/gi, function(match, capture) {
			    imgArr.push(capture)
				    })
			    }
				// 获取要点击的富文本父盒子
				var box = document.getElementsByClassName('previewImg')
				//对获取的项进行循环
				//当点击的项的下标和循环的当前项下标相等
				// 通过父节点获取所有图片
				var nodes = Array.from(box[0].querySelectorAll('img'));
				// 然后通过点击的节点知道当前节点的位置了
				let xx = function(event) {
					event.stopPropagation()
					var target = event.target;
					console.log(target.nodeName);
					// 判断点击的节点是否是图片
					if (target.nodeName !== 'IMG') {
						box[0].removeEventListener('click', xx, false);
					}
					if (target.nodeName === 'IMG') {
						// console.log(nodes.indexOf(event.target));
						// 获取点击图片的当前下标
						let indez = nodes.indexOf(event.target)
						//最后进行图片预览
						uni.previewImage({
							current: imgArr[indez],
							urls: imgArr,
							success: (res) => {
								if (box[0]) {
									box[0].removeEventListener('click', xx, false);
								}
							}
						});
					}
				}
				box[0].addEventListener("click", xx)
			}
		},
	    // 获取数据
		getInfo(id) {
			this.$util.request('xxx', {
					id
			}, true, 'get', (res => {
				let {
					code,
					msg,
					data
			} = res
			if (code == 200) {
           //关于修改富文本中的img图片大小和视频 正则表达式中间用|隔开表示“或”
				this.article = data.content.replace(/\<img|\<iframe/g, function(match) {
					switch (match) {
							case "\<img":
							return '<img style="max-width:100%;height:auto" ';
							case "\<iframe":
							return '<iframe webkitallowfullscreen="true" mozallowfullscreen="true" style="width:100%;height:100%" ';
							}
						})
        //在第一次进入页面获取到数据后就执行一次previewImg,否则第一次点击是预览不了的
					this.$nextTick(() => {
						this.previewImg(null, this.article)
					});
				} else {
						uni.showToast({
							title: msg,
							icon: 'none'
						})
					}
				}))
			},
        }

参考的相关文章链接uni-app v-html图片点击预览 - 简书

3.修改富文本中的图片样式replace(/\<img/gi, '<img style="max-width:100%;height:auto" ');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值