uniapp实战仿写网易云音乐(三)—视频页面(scroll-view组件实现横线滑动,mescroll-uni实现视频列表,向下滑动刷新当前页面)

这篇具有很好参考价值的文章主要介绍了uniapp实战仿写网易云音乐(三)—视频页面(scroll-view组件实现横线滑动,mescroll-uni实现视频列表,向下滑动刷新当前页面)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

接着上篇文章继续完成剩下的部分,本篇文章是完成第二个页面——视频页面的部分,视频还是没有做播放的效果,主要是做展示效果。下面附上两篇文章链接,没看过的同学可以回头看看:
uniapp实战仿写网易云音乐(一)—底部工具栏以及首页轮播图swiper的实现
uniapp实战仿写网易云音乐(二)—promise接口请求的封装和主页功能的实现,组件封装,配置下拉刷新

本篇文章完成的效果动态图:文章底部会附上本页面的css
uniapp实战仿写网易云音乐(三)—视频页面(scroll-view组件实现横线滑动,mescroll-uni实现视频列表,向下滑动刷新当前页面)

顶部导航条的实现

首先我们要实现的是顶部的导航条:
如下效果,可以看到它是一个可以向右滑动的导航栏,并且选中的tab下面会有一个导航条的效果。下面来实现:
uniapp实战仿写网易云音乐(三)—视频页面(scroll-view组件实现横线滑动,mescroll-uni实现视频列表,向下滑动刷新当前页面)

  1. 首先一个向右的导航栏我们就可以想到你使用scroll-view来实现:
    scroll-x="true"就是可以横向滑动
<scroll-view class="scroll-view" scroll-x="true" :show-scrollbar="false">
	<view class="rel">
	<!-- 导航条 -->
		<view class="item" v-for="(item,index) in navList" :key="index" 
		:class="{active: curNav==item.id}" @click="switchNav(item.id, index)">
			<view class="desc">
				{{item.name}}
			</view>
		</view>
	</view>
</scroll-view>

:class绑定高亮的样式
这里点击绑定了switchNav事件,用于更改选中项的id值(用于获取数据)

  1. 然后来写下面红色的导航条
    由上面效果图可以看出这里的红色导航条的宽度不是固定的,所以我们需要计算导航条的宽度
    先在data中定义 导航条默认宽度 和 导航条偏移量
data() {
	return {
		navList: [],                      //导航条
		curNav: '',                       //当前选中的导航条
		sliderWidth: 60,                  //导航条默认宽度
		sliderOffset:26,                  //导航条偏移量
	}
},

然后来写一个导航条,给动态的样式:

<view class="slide" 
:style="'width:'+sliderWidth+'rpx;transform:translateX('+sliderOffset+'rpx)'">
	
</view>

接下来就是点击导航栏的时候修改宽度和偏移量的值:

//导航条高亮切换
switchNav(itemId, index) {
	this.curNav = itemId;
	//导航条的宽度  140是第1项的宽度
	this.sliderWidth = index===1 ? 140: 60;
	//计算偏移量 左边16 文字60+间隙64=124   LOCK=80
	this.sliderOffset = 124*index + (index > 1 ? 80: 16)
},

导航条完整的样式:

<scroll-view class="scroll-view" scroll-x="true" :show-scrollbar="false">
	<view class="rel">
	<!-- 导航条 -->
		<view class="item" v-for="(item,index) in navList" :key="index" 
		:class="{active: curNav==item.id}" @click="switchNav(item.id, index)">
			<view class="desc">
				{{item.name}}
			</view>
		</view>
		<!-- 下划线 -->
		<view class="slide" 
		:style="'width:'+sliderWidth+'rpx;transform:translateX('+sliderOffset+'rpx)'">
		</view>
	</view>
</scroll-view>

视频列表的展示部分

开始实现视频列表的部分:
uniapp实战仿写网易云音乐(三)—视频页面(scroll-view组件实现横线滑动,mescroll-uni实现视频列表,向下滑动刷新当前页面)
视频列表这里我们使用mescroll-uni组件来实现:
这里贴一下这个外部控件的官方文档:mescroll-uni
这里要实现的是一个分页,向上滚动到要能加载下一页,向下滚动要能刷新当前页,这些功能只需要配置对应的属性
先在data中定义需要用到的参数:

downOption: {                     //下拉刷新
	auto: false
},
upOption: {                       //上拉加载下一页
	auto: false,
	page: {
		num: 0,                   //起始页
		size: 10,                 //一页条数
	}
},

@down和@up是下拉和上拉触发的对应的函数

<mescroll-uni :down="downOption" :up="upOption" @down="downCallback" @up="upCallback">
	<view class="video-list">
		<view class="video-item" v-for="(item, index) in relatedVideo" :key="index">
			<view class="video-wrap">
				<image :src="item.coverUrl" mode="" class="img"></image>
				<view class="desc ellipsis">
					{{item.title}}
				</view>
				<view class="creater-bar flex-box">
					<view class="name">
						{{item.creator[0].userName}}
					</view>
				</view>
			</view>
		</view>
	</view>
</mescroll-uni>

然后在函数中进行对应的操作:

//下拉刷新回调
downCallback(mescroll) {
	console.log("downcallback")
	//重置列表为第一页(自动执行page.num=1,再触发upcallback方法)
	mescroll.resetUpScroll();
},
//上拉加载回调
upCallback(mescroll) {
	console.log("upcallback", mescroll)
	//加载下一页数据
	this.getList(mescroll.num, mescroll.size, res=> {
		//若是第一页 则清空
		if (mescroll.num == 1) {
			this.relatedVideo = [];
		}
		//累加数据
		this.relatedVideo = this.relatedVideo.concat(res);
		//成功的回调,隐藏刷新状态
		mescroll.endSuccess();
	}, ()=>{
		//失败的回调,隐藏下拉刷新状态
		mescroll.endErr();
	})
}

CSS部分

<style lang="scss">
	.topbar {
		.h86 {
			height: 86rpx;
		}
	}

	.scroll-view {
		position: fixed;
		top: 0;
		width: 100%;
		height: 86rpx;
		white-space: nowrap;
		text-align: center;
		line-height: 86rpx;
		color: #333;
		font-weight: 600;
		border-bottom: 1rpx solid #e6e6e6;
		z-index: 10;
		background: #fff;
		.item {
			position: relative;
			display: inline-block;
			min-width: 126rpx;
			height: 86rpx;
			line-height: 86rpx;
			padding: 0 20rpx;
			&.active{
				color:#f32628;
			}
		}
	}

	.slide {
		position: absolute;
		width: 60rpx;
		height: 4rpx;
		left: 0;
		bottom: 0rpx;
		background: #f32628;
		transition: transform 0.3s;
		z-index: 2;
		/* #ifdef MP-WEIXIN */
		bottom: 2rpx;
		/* #endif */
	}

	.video-list {
		color: #333;
		background: #f8f8f8;
		.tit-bar {
			padding-left: 32rpx;
		}
		.video-item {
			padding-top: 32rpx;
			background: #fff;
			border-bottom: 24rpx solid #f8f8f8;
		}

		.video-wrap {
			width: 686rpx;
			margin: 0 auto;
		}

		.img {
			display: block;
			width: 686rpx;
			height: 390rpx;
			border-radius: 10rpx;
			background: #eee;
		}

		.desc {
			font-size: 30rpx;
			font-weight: 600;
			line-height: 84rpx;
			border-bottom: 1rpx solid #e6e6e6;
		}
	}

	.creater-bar {
		height: 100rpx;
		justify-content: space-between;
		align-items: center;
		.avactor-box {
			align-items: center;
		}
		.avactor {
			width: 66rpx;
			height: 66rpx;
			margin-right: 10rpx;
			border-radius: 66rpx;
			background: #eee;
		}

		.name {
			line-height: 100rpx;
		}
	}
</style>

最后

ok到这里就实现了第二个页面的内容,后面会继续更新剩下的页面,感兴趣的可以点一个订阅关注呀~~文章来源地址https://www.toymoban.com/news/detail-424676.html

到了这里,关于uniapp实战仿写网易云音乐(三)—视频页面(scroll-view组件实现横线滑动,mescroll-uni实现视频列表,向下滑动刷新当前页面)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • scroll-view在小程序页面里实现滚动,uniapp项目

     要实现红框中的区域进行滚动,scroll-view必须写高  overflow-y:auto 不写也会滚动

    2024年01月17日
    浏览(32)
  • uniapp 小程序端使用uni-popup组件时,页面用了scroll-view滚动组件,uni-popup组件也使用了scroll-view滚动出现组件滚动导致页面也滚动的解决方案

    在 uni-popup上给一个禁止滚动 @touchmove.stop.prevent=\\\"\\\" 和一个样式height: 100vh;    

    2024年02月10日
    浏览(41)
  • 网易云音乐开发--音乐播放暂停切换上下首功能实现

     问题就是我们点击播放,暂停之后,再次播放,它会多次发起请求。而我们现在对它的优化是,不需要重复的发起请求 这里我们通过把musicLink改为形参的方式,如果有给它传入参数,没有链接那么就让它发起请求,如果有那就继续走下去。而且我们将musicLink保存到data中 

    2024年02月06日
    浏览(30)
  • 微信小程序之网易云音乐的实现-云音乐

    基本介绍 基本功能都实现了,音乐的上一首下一首播放等,顺便把进度条的拖动播放写了下 主页的 每日推荐界面 写了 ,登录通过账号密码登录 (你也可以自己加一个验证码或者邮箱登录 ) 基于iPhone6(375*667分辨率)开发,后面一些计算都是通过获取当前屏幕下的尺寸来计算的,但是不

    2024年02月10日
    浏览(29)
  • Python爬虫网易云音乐,Tkinter制作音乐播放器

    目录 一、效果展示 二、环境 三、实现过程 四、源码 页面的美化以及功能还有待升级~ 先来说一下已有功能吧: 可以在搜索框中通过歌曲或歌手名称进行搜索,效果和在网易云官网搜索一样。 点击开始下载,就会将搜索结果的第一条歌曲下载到指定文件夹 下载完毕后,会遍

    2024年02月04日
    浏览(41)
  • 安装UWP版网易云音乐

    下载APPX文件JasonWei512/NetEase-Cloud-Music-UWP-Repack: 网易云音乐 UWP 不更新版 (github.com) 下载安装 LTSC-Add-MicrosoftStore/Microsoft.NET.Native.Runtime.1.6_1.6.24903.0_x64__8wekyb3d8bbwe.Appx at master · kkkgo/LTSC-Add-MicrosoftStore (github.com)

    2024年02月11日
    浏览(28)
  • Python爬虫 - 网易云音乐下载

    爬取网易云音乐实战,仅供学习,不可商用,出现问题,概不负责! 分为爬取网易云歌单和排行榜单两部分。 因为网页中,只能显示出歌单的前20首歌曲,所以仅支持下载前20首歌曲(非VIP音乐) 具体过程: 1.通过抓包,获取到请求头 2.发送请求,获取到网页源代码,通过

    2024年01月19日
    浏览(38)
  • docker安装网易云音乐(yesplaymusic)

    演示地址:https://music.qier222.com/ 镜像地址:https://hub.docker.com/r/fogforest/yesplaymusic/tags 项目地址:https://github.com/qier222/YesPlayMusic ✨ 特性 ✅ 使用 Vue.js 全家桶开发 🔴 网易云账号登录(扫码/手机/邮箱登录) 📺 支持 MV 播放 📃 支持歌词显示 📻 支持私人 FM / 每日推荐歌曲 🚫🤝

    2024年02月05日
    浏览(41)
  • 网易云音乐开发--完善video模块

    老样子,npm start开启服务器 说一下问题  现在打开多个视频会让他,同时播放,相当的吵闹。我们只需要一次只有一个视频播放 看文档,我们的思路是点击这个视频,关闭上次视频   我们传入这个id 现在只能实现找到上一个视频的实例对象 这就能实现确定点击播放的视频和

    2024年02月04日
    浏览(35)
  • 网易云音乐开发--个人中心页效果实现

    就是我们真机调试,是没有数据的 就是我们手机上去访问我们电脑上自己搭的服务器,肯定是访问不到的 此时就需要我们内网穿透 1.win+R  输入 cmd 输入ipconfig 2.找到无线局域网适配器的IPv4 3.重新设置一个新的地址,只需将host中的localhost改为你的IPv4 4.用手机连上电脑的热点

    2024年02月04日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包