学习uniapp 在App端模仿抖音刷视频效果

这篇具有很好参考价值的文章主要介绍了学习uniapp 在App端模仿抖音刷视频效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uniapp小白,模仿抖音首页的刷视频功能,

学习uniapp 在App端模仿抖音刷视频效果

uniapp插件市场有很多,但是爱好摸鱼的我,也想试一试其他方法

上面是效果图(样式比较潦草,没有仔细写)

一开始想得比较简单,上下滑动的效果用uni内置的swiper组件即可实现,然后就开始干了如下

<template>
    <view>
        <swiper :vertical="true" class="box">
            <swiper-item v-for="it in swiperList" :key="it.id" class="spitem">
                <video :src="it.mp4" autoplay/>
            </swiper-item>
        </swiper>
    </view>
</template>

h5端浏览器上看,感觉自己以及结束了实现了刷视频的简单效果,

结果真机调试出现了匪夷所思的问题(视频一直卡在屏幕中间,并没有跟着swiper-item去滑动

也查了很多文,才知道video和map等控件属于原生控件,渲染时会高于前端组件(z-index也无济于事),webview以及cover-view等方法也尝试了一些,但是不太好使。

最后通过nvue才解决自己的问题,

关于nvew和vue的解释可以参考https://blog.csdn.net/weixin_53853031/article/details/125416839

简单说就是nvue 走 weex 渲染,uni-app 集成了 weex 的 SDK,也就实现了 App 端的原生渲染能力。将前端组件当原生组件去渲染,解决了前端控件优先级低于原生控件的问题

html代码

<template>
    <view>
        <swiper :vertical="true" class="box" :style="`height: ${hw.height}px;;`">
            <swiper-item v-for="it in swiperList" :key="it.id" class="spitem">
                <view class="bg-video" :style="`width:${hw.width}px;height:${hw.height}px`">
                    <video class="vdplayer" :id="'vdplayer' + it.id" :ref="'vdplayer' + it.id" :src="it.mp4"
                        :controls="false" :duration="1000" :loop="true" :show-center-play-btn="true"
                        object-fit="contain" autoplay :style="`width:${hw.width}px;height:${hw.height}px;`" />
                    <view class="right_menu" :style="`top:${hw.height/2}px`">
                        <image :src="it.imgSrc" class="user_hp" />
                        <view @click="beFondOfClick(it)" class="imgBox">
                            <image class="spitemImage" src="@/static/image/d1.png" v-if="!it.beFondOf" />
                            <image class="spitemImage" src="@/static/image/d2.png" v-if="it.beFondOf" />
                            <view><text class="rtext">点赞</text></view>
                        </view>
                        <view class="imgBox">
                            <image class="spitemImage" src="@/static/image/pl.png" />
                            <view><text class="rtext">评论</text></view>
                        </view>
                        <view class="imgBox">
                            <image class="spitemImage" src="@/static/image/zf.png" />
                            <view><text class="rtext">转发</text></view>
                        </view>
                    </view>
                    <view class="bottom_info" :style="`bottom:${hw.height/6};width:${hw.width/2}`">
                        <view><text class="user_name">{{it.user_name}}</text></view>
                        <view><text class="video_introduce">{{it.video_introduce}}</text></view>
                    </view>
                </view>
            </swiper-item>
        </swiper>
    </view>
</template>

js代码

因为nvue的渲染问题,百分比和vh、vw等部分css不会生效,所以页面加载的时候获取了屏幕宽高,去计算宽高布局

export default {
        data() {
            return {
                hw: {
                    width: 0,
                    height: 0
                },
                swiperList: [{
                    id: 1,
                    mp4: 'https://cdn.uviewui.com/uview/resources/video.mp4',
                    imgSrc:'../../static/image/logo.png',
                    user_name:'uni-app',
                    video_introduce:'一段视频简介,一段视频简介,一段视频简介,一段视频简介,一段视频简介',
                    beFondOf: false
                }, {
                    id: 2,
                    mp4: 'http://vcdnb.huoying666.com/new_video/2022/0725/b94a235358c31668dc99e7cff9fe5e9c/v1080/b94a235351_6921661_fhd.mp4',
                    imgSrc:'../../static/image/qsLoc.png',
                    user_name:'骑手小杨',
                    video_introduce:'一段视频简介,一段视频简介',
                    beFondOf: false
                }, {
                    id: 3,
                    mp4: 'http://vcdnb.huoying666.com/new_video/2020/1211/9d0b01c88bd05721f9de88122de72db1/v1080/9d0b01c881_5872976_fhd.mp4',
                    imgSrc:'../../static/image/wdLoc.png',
                    user_name:'无敌风火轮',
                    video_introduce:'一段视频简介,一段视频简介,一段视频简介,一段视频简介',
                    beFondOf: false
                }, {
                    id: 4,
                    mp4: 'http://vcdnb.huoying666.com/new_video/2021/1109/6f5610c304083ca59141c8f70aca6396/v720/6f5610c301_6578243_hd.mp4',
                    imgSrc:'../../static/tabbar/shopping_trolley2.png',
                    user_name:'购物狂魔',
                    video_introduce:'一段视频简介,一段视频简介,一段视频简介',
                    beFondOf: false
                }]
            }
        },
        onLoad() {
            let screenWidth = uni.getSystemInfoSync().screenWidth
            let screenHeight = uni.getSystemInfoSync().screenHeight
            this.hw = {
                width: screenWidth,
                height: screenHeight
            }
        },
        onShow() {

        },
        methods: {
            beFondOfClick(it) {
                it.beFondOf = !it.beFondOf
            }
        }
    }

css代码

<style lang="scss" scoped>
    .box {
        background-color: #333;
        text-align: center;
    }

    .bg-video {
        background-color: #333;
    }

    .right_menu {
        position: absolute;
        right: 30rpx;
        z-index: 990;

        .user_hp {
            margin-bottom: 30rpx;
            width: 50px;
            height: 50px;
            border: 2px solid #ffffff;
            background-color: #fff;
            border-radius: 50%;
        }

        .imgBox {
            display: flex;
            align-items: center;

            .spitemImage {
                width: 60rpx;
                height: 60rpx;
            }

            .rtext {
                text-align: center;
                color: #ffffff;
                font-size: 24rpx;
                margin-top: 10rpx;
                margin-bottom: 30rpx;
            }
        }

    }
    .bottom_info{
        position: absolute;
        left: 30rpx;
        z-index: 990;
        .user_name{
            font-size: 40rpx;
            font-weight: bold;
            color:#ffffff;
            margin-bottom: 20rpx;
        }
        .video_introduce{
            font-size: 28rpx;
            color:#ffffff;
        }
    }
</style>

感觉性能不是很好,有需要可以借鉴,大佬有更好的办法也可以指导指导文章来源地址https://www.toymoban.com/news/detail-427033.html

到了这里,关于学习uniapp 在App端模仿抖音刷视频效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp中swiper的大坑,在swiper-item中嵌套video在移动端无法实现上下滑动的,要用nvue代替,从而实现抖音滑视频效果

    想做一个抖音滑屏切换视频的效果,结果。。。。。 研究了一天,发现在swiper-item中嵌套视频时,移动端只能滑动切换背景,视频在原位置是不会动的。。。。但是在h5端和小程序端可以完美运行,这就很让人生气了:  在移动端的时候,就会出现虽然切换到第二个视频了,

    2023年04月09日
    浏览(65)
  • 抖音、视频号流行的 Bokeh(虚化) 效果是怎么实现的?

    未经作者(微信ID:Byte-Flow)允许,禁止转载 文章首发于公众号:字节流动 Bokeh 效果是指 照片中背景模糊而主体清晰的一种摄影效果 。这种效果是通过使用大光圈的镜头来实现的,使得光圈外的景物失去焦点,呈现出一种柔和、虚化的效果。 Bokeh 效果的质量受到多个因素的

    2024年02月05日
    浏览(68)
  • uniapp - 仿抖音短视频项目

    特殊通知 1.请用户认真阅读以下说明,千万不能混淆页面随意引入,如果你发现运行后页面样式排版错乱,大概率是引入错误喔。 2.请App端用户将HbuilderX版本调整到3.3.9版本或3.3.9以下的版本,以规避list-cell渲染问题。 需求说明 在项目中内置短视频模块 功能说明 1.APP端 滑动

    2024年02月15日
    浏览(59)
  • 抖音实战~实现App端视频上传、发布、落库

    一、API阅读 1. 选择或拍摄视频 找到 uni.chooseVideo(OBJECT) API, 选择或拍摄视频文件:https://uniapp.dcloud.net.cn/api/media/video.html#choosevideo 2. 云函数API~文件上传 用到的api: uniCloud.uploadFile(Object uploadFileOptions) uniCloud API文档 3. 视频截帧 用途:视频截帧当视频封面 视频截帧阿里云服务 视

    2023年04月08日
    浏览(38)
  • 【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 与传统的影视行业相比,诞生于移动互联网时代的短视频是个全新行业,它制作方便又容易传播,一出现就成为大街小巷的时髦潮流。 各行各业的人们均可通过短视频展示自己,短小精悍的视频片段原来能够容纳如此丰富的

    2024年02月03日
    浏览(41)
  • 从零搭建仿抖音短视频APP-后端开发短视频业务模块(1)

    项目持续更新中: 仿抖音短视频APP专栏 目录 发布短视频的流程梳理 传统上传流程  传统上传 CDN上传 CDN上传流程 使用Unicloud云端功能  实现app端视频上传 保存视频信息入库 注:controller接受到文件之后会把文件上传到服务器,同时controller获得某一帧帧来获得我们的封面图,

    2023年04月12日
    浏览(49)
  • 从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)

    项目持续更新中: 仿抖音短视频APP专栏 目录 保存系统消息到MongoDB 系统消息入库保存-关注 系统消息入库保存-点赞短视频 系统消息入库保存-评论与回复 我们把mongoDB整合到Springboot之后,我们需要把映射层面做好。 首先在model创建一个新的对象层面,也就是一个新的包: 我

    2024年02月01日
    浏览(60)
  • uniapp实战项目 (仿知识星球App) - - 效果篇

    实战项目名称:仿知识星球App 技术栈:前端 = uni-app ( 后端:Node.js + Mysql + Apollo + Graphql ) 已实现功能:微信登录,创建星球,内容管理,星球管理 项目git地址:请点击访问 项目最终效果图:@点击访问效果图,欢迎关注收藏订阅专栏!!! 文章会先按照 ① uni-app端 、 ②

    2024年02月02日
    浏览(41)
  • uniapp实现app端图片+视频轮播

    需求 :swiper轮播里面,可能有图片也可能有视频。当swiper切换到视频时,视频以动画的样式展示(无按钮、进度条等默认播放控件),自动轮播取消,手动滑动切换取消。当视频播放完毕后,可以自动轮播,可以手动滑动切换。 找了个插件市场里的改的。( 感谢大佬的插件

    2024年02月02日
    浏览(30)
  • uniapp-app的视频轮播图

    直接使用swiper做图片轮播图是没有问题的,视频轮播图的兼容性仅仅体现在APP上。 我的方法是将nvue页面作为视频的遮罩层,如果直接将视频放到nvue页面,说不定也可以。其实这个兼容性的关键在于video标签在手机上的层级过高,除了nvue,还有其他方法解决。 因为我的这个项

    2023年04月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包