道远石头
道远石头
  • 发布:2021-10-12 17:02
  • 更新:2023-11-22 22:36
  • 阅读:4847

uni app环境下解决video无法跟随div滚动条滚动的问题

分类:uni-app

uni app环境下vue文件中,video因为用的是原生组件,所以只能跟随页面的滚动条。

假如你写了一个带滚动条的div,里面写了一个video标签,那对不起,video不会跟着滚动。

废话不多说,解决代码如下:

video组件的代码如下,实现思路就是借助iframe,通信就采用手动去触发事件

<template>  
    <iframe @event1="event1" @event2="event2" :onload="onloadCode" src="about:blank" style="border:1px solid;height: 300px;width: 100%"></iframe>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                onloadCode: `  
                const url = 'https://vd3.bdstatic.com/mda-mja2qsy47mbyh1xc/sc/cae_h264_clips/1633918903861514556/mda-mja2qsy47mbyh1xc.mp4?auth_key=1634030413-0-0-7898726f7bd328302e2119fdf694fd5e&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest='  
                this.contentWindow.document.body.innerHTML = '<video style="width: 100%;height: 100%" controls="controls" src="'+url+'"></video>';  
                const iframe = top.document.getElementsByTagName('iframe')[0]  
                var evObj = document.createEvent('MouseEvents');  
                evObj.initEvent( 'event1', true, false );  
                iframe.dispatchEvent(evObj)  
                `  
            }   
        },  
        onShow() {  

        },  

        methods: {  
            event1(a) {  
                console.log(a)  
            },  
            event2(a) {  
                console.log(a)  
            }  
        }  
    }  
</script>  

<style>  
</style>  

以下是调用video,解决div滚动时video不跟随的代码

<template>  
    <view class="content">  
        <view class="text-area">  
            <div class="pos">  
                <Video />  
                <div class="zw">占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用</div>  
                <div class="zw">占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用</div>  
            </div>  
            <div class="zw">占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用</div>  
            <div class="zw">占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用占位专用</div>  
        </view>  
    </view>  
</template>  

<script>  
    import Video from './video/index.vue'  
    export default {  
        components: {  
            Video  
        }  
    }  
</script>  

<style>  
    .pos {  
        position: fixed;  
        bottom: 0;  
        background: red;  
        left: 0;  
        right: 0;  
        height: 500px;  
        overflow: auto;  
    }  
    .zw {  
        word-break: break-all;  
        height: 800px;  
    }  
</style>

app运行效果图如下,可以看出video是可以跟随div滚动的

1 关注 分享
HRK

要回复文章请先登录注册

HRK

HRK

虽然确实是种解决方式,但是这种实现方式的video直接脱离原本环境了,想要去操控video很麻烦,但还是给你点个赞,感谢无私奉献
2023-11-22 22:36
爱笑的小哥

爱笑的小哥

动态设置播放地址后咋没效果了
2023-11-22 17:57
道远石头

道远石头 (作者)

回复 1***@qq.com :
通过这种方式创建的video,有个缺陷,就是和uni环境是完全隔离的,要进行通信的话,也只能通过html的自定义事件向uni环境单向传递,参考上面代码中的@event1事件,如果要控制视频播放,暂停,那么只能在video的那个环境内通过原生js api去操作
2023-03-22 16:24
1***@qq.com

1***@qq.com

求教!!! 这样创建的video如何动态的控制他的播放与暂停 实测使用uni的获取video方法无法调用play播放
2023-01-08 23:25
3***@qq.com

3***@qq.com

回复 玉逍遥 :
const url ='${this.urlsd}'
2023-01-07 10:18
3***@qq.com

3***@qq.com

const url ='${XXX}'
2023-01-07 10:18
玉逍遥

玉逍遥

播放地址动态的怎么设置
2022-12-26 21:26
船

回复 2***@qq.com :
你好,录制视频我也拿不到,你现在是怎么解决的
2022-10-20 01:58
道远石头

道远石头 (作者)

回复 w***@163.com :
你创建一个最简单的页面,然后把上面代码放进去,应该是可以的
2021-11-19 16:44
w***@163.com

w***@163.com

你好,能加个联系方式吗?我这组件传进去拿不到,是在真机上运行的
2021-11-17 09:39