当前位置:   article > 正文

学习uni-app仿网易云及总结_仿网易云项目

仿网易云项目

目录

一.了解uni-app

二.搭配开发环境

1.Node.js,其中Node.js是JavaScript的运行环境

2.HBuilderX,HBuilderX是Uni-app的开发工具

1.可以使用 HBuilderX 的插件市场安装 uni-app 插件

2.可以在 HBuilderX 中选择需要运行的平台

三.创建项目

1.项目目录

以下是我的学习仿网易云音乐项目的目录及基本文件介绍

pages文件夹:

static文件夹:

App.vue文件

 mian.js文件: 

manifest.json文件

pages.json文件

uni.scss文件

四.编写代码

封装网易音乐云调用

config.js

api.js

页面路由与传值

index页:

list页

 自定义组件

五.运行调试

1.在浏览器中预览步骤如下:

2.在手机应用上测试步骤如下:

六.展示项目

总结.


一.了解uni-app

uni-app是一个跨平台开发框架,可以用于同时开发iOS、Android和Web应用。它基于Vue.js框架,开发者可以用Vue.js的语法来编写应用程序,而uni-app会将代码编译成各个平台的原生代码或者H5代码。uni-app的优点包括代码复用率高、开发效率高、应用性能好等。同时,uni-app也提供了丰富的组件和插件,可以方便地实现各种功能。

二.搭配开发环境

1.Node.js,其中Node.js是JavaScript的运行环境

安装教程

2.HBuilderX,HBuilderX是Uni-app的开发工具

安装教程

1.可以使用 HBuilderX 的插件市场安装 uni-app 插件

2.可以在 HBuilderX 中选择需要运行的平台

(如微信小程序、支付宝小程序、H5 等)进行预览和测试。

三.创建项目

1.项目目录

以下是我的学习仿网易云音乐项目的目录及基本文件介绍

pages文件夹:

其主要的效果就是存放页面效果和微信小程序下面的pages文件夹是一样的

示范:首页页面效果图及代码

  1. <template>
  2. <view class="content">
  3. <uamhead :title="title"></uamhead>
  4. <scroll-view scroll-y="true" >
  5. <view class="index-ss" @tap="navplayer">
  6. <text class="iconfont iconsearch"></text>
  7. <input type="text" placeholder="搜索歌单">
  8. </view>
  9. <view>
  10. <m-for-skeleton
  11. :avatarSize="200"
  12. :row="3"
  13. :title="false"
  14. :loading="loading"
  15. isarc="square"
  16. :titleStyle="{}"
  17. v-for="(item,key) in 4"
  18. :key="key">
  19. </m-for-skeleton>
  20. </view>
  21. <view class="index-list" v-for="(item,index) in playlist" :key="index" @click="handleToList(item.id)">
  22. <view class="index-list-item">
  23. <view class="index-list-img">
  24. <image :src="item.coverImgUrl" mode=""></image>
  25. <text>{{item.updateFrequency}}</text>
  26. </view>
  27. <view class="index-list-text">
  28. <view v-for="(musicItem,index) in item.tracks" :key="index">
  29. {{index+1}}.{{musicItem.first}}-{{musicItem.second}}
  30. </view>
  31. </view>
  32. </view>
  33. </view>
  34. </scroll-view>
  35. </view>
  36. </template>
  37. <script>
  38. import { topList } from '../../common/api.js'
  39. // const toplistdata=require('@/static/toplist.json')
  40. import mForSkeleton from "@/components/m-for-skeleton/m-for-skeleton";
  41. import uamhead from "../../components/uamhead/uamhead.vue"
  42. import search from "../search/search.vue"
  43. export default {
  44. components: {
  45. mForSkeleton,
  46. search,
  47. },
  48. data() {
  49. return {
  50. playlist:[],
  51. title: 'UAMusic',
  52. loading: true
  53. }
  54. },
  55. onLoad() {
  56. // this.playlist= toplistdata;
  57. topList().then((res)=>{
  58. if(res.length){
  59. setTimeout(()=>{
  60. this.playlist = res;
  61. this.loading=false
  62. },2000);
  63. }
  64. });
  65. },
  66. methods: {
  67. handleToList(id){
  68. uni.navigateTo({
  69. url:'/pages/list/list?listid='+id
  70. })
  71. },
  72. navplayer(id){
  73. uni.navigateTo({
  74. url:'/pages/search/search?songid='+id
  75. })
  76. }
  77. }
  78. }
  79. </script>
  80. <style>
  81. .index-ss {
  82. display: flex;
  83. /* 上下居中 */
  84. align-items: center;
  85. height: 70rpx;
  86. margin: 70rpx 30rpx 30rpx 30rpx;
  87. background: #f7f7f7;
  88. border-radius: 50rpx;
  89. }
  90. .index-search text {
  91. font-size: 26rpx;
  92. margin-right: 26rpx;
  93. margin-left: 28rpx;
  94. }
  95. .index-search input {
  96. font-size: 28rpx;
  97. flex: 1;
  98. }
  99. .content {
  100. display: flex;
  101. flex-direction: column;
  102. align-items: center;
  103. justify-content: center;
  104. }
  105. .logo {
  106. height: 200rpx;
  107. width: 200rpx;
  108. margin-top: 200rpx;
  109. margin-left: auto;
  110. margin-right: auto;
  111. margin-bottom: 50rpx;
  112. }
  113. .text-area {
  114. display: flex;
  115. justify-content: center;
  116. }
  117. .title {
  118. font-size: 36rpx;
  119. color: #8f8f94;
  120. }
  121. .index-list{ margin:0 30rpx;;width: 95%}
  122. .index-list-item{ display: flex; margin-bottom: 35rpx;}
  123. .index-list-img{ width:140px; height:128px; margin-right:20rpx; border-radius: 15rpx; overflow: hidden; position: relative;}
  124. .index-list-img image{ width:100%; height:100%;}
  125. .index-list-img text{ position: absolute; font-size:22rpx; color:white; bottom: 15rpx; left:15rpx;}
  126. .index-list-text{ flex:1; font-size:14px; line-height: 41px; font-weight: 600;}
  127. .index-list-text view{}
  128. </style>

static文件夹:

主要存放静态文件的,比如图片等。

App.vue文件

App.vue是针对整个项目称作根组件。

 mian.js文件: 

作用:main.js是uni-app的入口文件,主要作用是初始化vue实例、定义全局组件、使用需要的插件.

manifest.json文件

manifest.json文件是一个项目配置文件。

pages.json文件

pages.json是一个非常重要的配置文件,它用于配置小程序的页面路径、窗口表现、导航条样式等信息

uni.scss文件

css代码全局生效

四.编写代码

封装网易音乐云调用

config.js

  1. export const baseUrl = 'https://flask-web-frak-shishn-kvmjsphrif.cn-shenzhen.fcapp.run';
  2. // export const baseUrl = 'http://localhost:3000'

api.js

  1. import { baseUrl } from './config.js';
  2. export function topList(){
  3. return new Promise(function(resolve,reject){
  4. uni.request({
  5. url: `${baseUrl}/toplist/detail`,
  6. method: 'GET',
  7. data: {},
  8. success: res => {
  9. let result = res.data.list;
  10. resolve(result.splice(0,4));
  11. },
  12. fail: (err) => {
  13. console.log(err);
  14. },
  15. complete: () => {}
  16. });
  17. });
  18. }

页面路由与传值

例:从index页点击所选榜单后跳转到所选列表页

index页:

list页

 自定义组件

  1. <template>
  2. <view class="content">
  3. <uamhead :title="title"></uamhead>
  4. <scroll-view scroll-y="true" >
  5. <view class="index-ss" @tap="navplayer">
  6. <text class="iconfont iconsearch"></text>
  7. <input type="text" placeholder="搜索歌单">
  8. </view>
  9. <view>
  10. <m-for-skeleton
  11. :avatarSize="200"
  12. :row="3"
  13. :title="false"
  14. :loading="loading"
  15. isarc="square"
  16. :titleStyle="{}"
  17. v-for="(item,key) in 4"
  18. :key="key">
  19. </m-for-skeleton>
  20. </view>
  21. <view class="index-list" v-for="(item,index) in playlist" :key="index" @click="handleToList(item.id)">
  22. <view class="index-list-item">
  23. <view class="index-list-img">
  24. <image :src="item.coverImgUrl" mode=""></image>
  25. <text>{{item.updateFrequency}}</text>
  26. </view>
  27. <view class="index-list-text">
  28. <view v-for="(musicItem,index) in item.tracks" :key="index">
  29. {{index+1}}.{{musicItem.first}}-{{musicItem.second}}
  30. </view>
  31. </view>
  32. </view>
  33. </view>
  34. </scroll-view>
  35. </view>
  36. </template>
  1. <script>
  2. import { topList } from '../../common/api.js'
  3. // const toplistdata=require('@/static/toplist.json')
  4. import mForSkeleton from "@/components/m-for-skeleton/m-for-skeleton";
  5. import uamhead from "../../components/uamhead/uamhead.vue"
  6. import search from "../search/search.vue"
  7. export default {
  8. components: {
  9. mForSkeleton,
  10. search,
  11. },
  12. data() {
  13. return {
  14. playlist:[],
  15. title: 'UAMusic',
  16. loading: true
  17. }
  18. },
  19. onLoad() {
  20. // this.playlist= toplistdata;
  21. topList().then((res)=>{
  22. if(res.length){
  23. setTimeout(()=>{
  24. this.playlist = res;
  25. this.loading=false
  26. },2000);
  27. }
  28. });
  29. },
  30. methods: {
  31. handleToList(id){
  32. uni.navigateTo({
  33. url:'/pages/list/list?listid='+id
  34. })
  35. },
  36. navplayer(id){
  37. uni.navigateTo({
  38. url:'/pages/search/search?songid='+id
  39. })
  40. }
  41. }
  42. }
  43. </script>

五.运行调试

Uni-app的运行和调试可以分为两种方式:在浏览器中预览和在手机应用上测试。

1.在浏览器中预览步骤如下:

1.打开命令行工具,进入项目所在目录。

2.执行命令npm run dev:mp-weixin(mp-weixin表示微信小程序,可以根据实际情况修改)。

3.等待编译完成后,在浏览器中打开开发者工具,选择手机模拟器模式,即可预览。

2.在手机应用上测试步骤如下:

1.打开命令行工具,进入项目所在目录。

2.执行命令npm run dev:mp-weixin(mp-weixin表示微信小程序,可以根据实际情况修改)。

3.将生成的dist目录复制到微信开发者工具中。

4.在微信开发者工具中选择“预览”,扫描二维码即可在手机上预览和测试。

注意事项:

1.在进行调试前,需要先安装Node.js和npm。

2.如果遇到编译错误,可以尝试执行npm install命令更新依赖。

3.在手机应用上测试时,需要先在微信开发者工具中登录自己的微信账号

六.展示项目

1685113563968

总结.

  • 省时省力:Uniapp采用一份代码多端适配的方式,只需编写一次代码即可在多个平台上运行,大大减少了开发者的开发时间和成本。
  • 易学易用:Uniapp使用Vue.js作为其开发语言,Vue.js的语法简单易懂,上手难度较低,适合新手入门。
  • 性能优越:Uniapp采用了自研的渲染引擎和性能优化策略,能够保证应用程序的流畅度和稳定性。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/77894
推荐阅读
相关标签
  

闽ICP备14008679号