首页 > 编程语言 >微信小程序(四)仿网易云首页

微信小程序(四)仿网易云首页

时间:2023-07-16 22:47:41浏览次数:49  
标签:index 网易 微信 js static 首页 text 组件 pages

1. 简介

简单实现一个基于微信小程序的网易云音乐。

1. 网易云后台接口搭建:

基于网上的一个项目进行搭建,项目是一个node 项目。所以如果本地启动需要下载node。

https://gitcode.net/mirrors/Binaryify/NeteaseCloudMusicApi?utm_source=csdn_github_accelerator

简单分为如下步骤:

1. clone 项目
2. 引入vs
3. 终端打开之后输入:
npm install
ode app.js
4. 默认监听的端口是3000, 可以修改代码,也可以用如下命令修改
set PORT=4000 && node app.js

2. 接口文档详细地址

https://binaryify.github.io/NeteaseCloudMusicApi/#/?id=neteasecloudmusicapi

3. 内网穿透

基于ngrok 进行内网穿透,这样真机调试的时候才可以使用。但是体验版和开发版都需要备案的域名和https 请求。

参考:https://ngrok.com/download

2. 首页效果

3. 核心代码

1. tabBar 下面的导航栏

修改app.json: 修改字体颜色,选中之后的颜色以及默认的背景颜色等。

{
  "pages": [
    "pages/index/index",
    "pages/personal/personal",
    "pages/video/video"
  ],
  "entryPagePath": "pages/index/index",
  "window": {
    "navigationBarBackgroundColor": "#d43c33",
    "navigationBarTextStyle": "white",
    "navigationBarTitleText": "Geogre音乐"
  },
  "tabBar": {
    "color": "#333",
    "selectedColor": "#d43c33",
    "backgroundColor": "#fff",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "主页",
        "iconPath": "/static/images/tabs/tab-home.png",
        "selectedIconPath": "/static/images/tabs/tab-home-current.png"
      },
      {
        "pagePath": "pages/video/video",
        "text": "视频",
        "iconPath": "/static/images/tabs/select.png",
        "selectedIconPath": "/static/images/tabs/selected.png"
      },
      {
        "pagePath": "pages/personal/personal",
        "text": "个人中心",
        "iconPath": "/static/images/tabs/tab-my.png",
        "selectedIconPath": "/static/images/tabs/tab-my-current.png"
      }
    ]
  }
}

2. 封装请求的工具类

  1. 配置服务器地址的js文件

​ 一个是本地调试的,一个是ngrok 映射之后的

// 配置服务器相关信息
export default {
  host: 'http://localhost:3000',
  mobileHost: 'https://75b3-2409-8a00-79a9-4441-d57f-3979-ee8b-84bc.ngrok-free.app'
}
  1. 封装request.js
// 发送ajax请求
/*
* 1. 封装功能函数
*   1. 功能点明确
*   2. 函数内部应该保留固定代码(静态的)
*   3. 将动态的数据抽取成形参,由使用者根据自身的情况动态的传入实参
*   4. 一个良好的功能函数应该设置形参的默认值(ES6的形参默认值)
* 2. 封装功能组件
*   1. 功能点明确
*   2. 组件内部保留静态的代码
*   3. 将动态的数据抽取成props参数,由使用者根据自身的情况以标签属性的形式动态传入props数据
*   4. 一个良好的组件应该设置组件的必要性及数据类型
*     props: {
*       msg: {
*         required: true,
*         default: 默认值,
*         type: String
*       }
*     }
*
* */
import config from './config'
export default  (url, data={}, method='GET') => {
  return new Promise((resolve, reject) => {
    // 1. new Promise初始化promise实例的状态为pending
    wx.request({
      url: config.mobileHost + url,
      data,
      method,
      header: {
        cookie: wx.getStorageSync('cookies')
      },
      success: (res) => {
        if(data.isLogin){// 登录请求
          // 将用户的cookie存入至本地
          //wx.setStorage({
            //key: 'cookies',
            //data: res.cookies
          //})
        }
        resolve(res.data); // resolve修改promise的状态为成功状态resolved
      },
      fail: (err) => {
        // console.log('请求失败: ', err);
        reject(err); // reject修改promise的状态为失败状态 rejected
      }
    })
  })
  
}

​ 其实就是将请求统一包装为一个方法。 也写了后面包含登录信息存本地、取cookie 等方法。其中data和method 都有默认值。

  1. page 中js 使用:
import request from '../../utils/request'

...
let bannerListData = await request('/banner', {type: 2});
this.setData({
  bannerList: bannerListData.banners
})

3. 组件-轮播图swiper

  1. wxml
  <!--轮播图-->
  <swiper class="banners" indicator-dots indicator-color="ivory" autoplay indicator-active-color="#d43c33">
    <swiper-item wx:for="{{bannerList}}" wx:key="bannerId">
      <image src="{{item.pic}}"/>
    </swiper-item>
    <!-- <swiper-item>
      <image src="/static/images/nvsheng.jpg" mode="" />
    </swiper-item>
    <swiper-item>
      <image src="/static/images/nvsheng.jpg" mode="" />
    </swiper-item> -->
  </swiper>

​ 组件上设置indicator-dots 代表indicator-dots="true" 属性(开启面板指示点)、 indicator-color 面板指示点颜色、自动轮播(默认5s换一个)、indicator-active-color 当前面板指示点颜色。另外还有重要的属性:

next-margin="50rpx"    下一个item默认展示多少
previous-margin="50rpx" 上一个item展示多少
circular="true" (circular) 自动循环
  1. Wxss 相关样式
/*轮播图***/
.banners {
  width: 100%;
  height: 300rpx;
}
.banners image {
  width: 100%;
  height: 100%;
}

4. 可滚动视图区域 scroll-view

中间的为你精心推荐用的 scroll-view 滚动视图。

  1. wxml
<!--推荐歌曲区域-->
  <view class="recommend">
    <NavHeader title="推荐歌曲" nav="为你精心推荐"></NavHeader>

    <!--内容区域-->
    <scroll-view enable-flex="true" class="recommendScroll" scroll-x>
      <view class="scrollItem" wx:for="{{recommendList}}" wx:key="id" wx:for-item="recommendItem">
        <image src="{{recommendItem.picUrl}}"></image>
        <text>{{recommendItem.name}}</text>
      </view> 
    </scroll-view>
  </view>

​ 这里需要注意: enable-flex="true" 是允许其flex 布局,代表允许盒模型布局。scroll-x 代表x轴横向滚动。

  1. wxss
/**推荐内容区域**/
.recommendScroll {
  display: flex;
  padding-left: 20rpx;
  height: 300rpx;
}
.scrollItem {
  width: 200rpx;
  margin-right: 20rpx;
}
.scrollItem image {
  width: 200rpx;
  height: 200rpx;
  border-radius: 20rpx;
}
.scrollItem text {
  font-size: 26rpx;
  /**单行文本溢出,省略号代替**/
  /* white-space: nowrap; */
  /* display: block; */
  /* overflow: hidden; */
  /* text-overflow: ellipsis; */
  /**多行文本溢出,省略号代替**/
  display: -webkit-box;
  -webkit-box-orient: vertical; /**对齐模式*/
  -webkit-line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
}

注意:

1. .recommendScroll 设定height 是必须的,默认是按y轴纵向滚动,不设定高度会占用原来的高度。
2. .scrollItem text 下面是对单行文本、多行文本自动用...展示的样式

5. 自定义组件

推荐歌曲,为你精心推荐 部分是自定义组件。

1. 自定义组件

/components/NavHeader/Navheader.XXX

  1. wxml
<view class="recommendContainer">
    <view class="header">
      <text class="title">{{title}}</text>
      <view>
        <text>{{nav}}</text>
        <text class="more">查看更多</text>
      </view>
    </view>
  </view>
  1. js
// components/NavHeader/NavHeader.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    title: {
      type: String,
      value: 'default value',
    },
    nav: {
      type: String,
      value: 'default value',
    }
  }
})
  1. json
{
  "component": true,
  "usingComponents": {}
}
  1. wxss
/**推荐歌曲**/
.recommendContainer {
  padding: 20rpx;
}
.recommendContainer .header {
  padding-bottom: 20rpx;
}
.recommendContainer .header .title {
  font-size: 32rpx;
  line-height: 80rpx;
  color: #666;
}
.recommendContainer .header .more{
  float: right;
  border: 1rpx solid #333;
  padding: 10rpx 20rpx;
  font-size: 24rpx;
  border-radius: 30rpx;
}

2. 使用组件

  1. index.json 声明组件
{
  "usingComponents": {
    "NavHeader": "/components/NavHeader/NavHeader"
  }
}
  1. Wxml 使用组件
<NavHeader title="推荐歌曲" nav="为你精心推荐"></NavHeader>
。。。
<NavHeader title="排行榜" nav="热歌风向标"></NavHeader>

6. 阿里云icon字体图标库使用

官网: https://www.iconfont.cn/

  1. 将图标加到自己的项目中, 然后下面有个css 地址。 复制css地址,浏览器打开,然后下载为css。然后导入到微信开发者工具static/iconfont/iconfont.wxss
  2. app.wxss 引入字体库
@import "/static/iconfont/iconfont.wxss"
  1. 代码使用
<text class="iconfont icon-xiaoxi"></text>

标签:index,网易,微信,js,static,首页,text,组件,pages
From: https://www.cnblogs.com/qlqwjy/p/17558744.html

相关文章

  • 微信小程序(五)个人中心页
    1.效果1.逻辑1.如果未登录.点击头像可以跳转到登录页面,然后扫码进行登录(只能用登录)2.登录完成之后:(1).将登录的cookie信息存到本地,同时每次访问的时候都携带cookie维持登录状态(2).将userInfo信息存到本地(3).跳转到登录界面3.首页onLoad(1).获取用用户信息......
  • 仿微信聊天程序 - 09. 聊天信息
    本文是仿微信聊天程序专栏的第九篇文章,主要记录了【聊天信息】的逻辑实现,下面涉及代码是《仿微信聊天程序-09.聊天窗口》的基础上进行完善的。实现效果在《仿微信聊天程序-09.聊天窗口》章节中,已经实现了基本的聊天界面框架,《09.聊天信息》这里只是补充实现聊天内容部分......
  • 仿微信聊天程序 - 01. 开篇
    本文是仿微信聊天程序专栏的第一篇文章,主要简要说明仿微信聊天程序的功能需求及架构设计。仿微信聊天程序专栏主要记录了使用JavaFX+Netty开发仿微信聊天程序---米虫IM。功能需求米虫IM已经完成的功能如下:用户注册功能用户登录功能搜索好友功能添加好友功能文本聊天......
  • 仿微信聊天程序 - 02. 注册界面
    本文是仿微信聊天程序专栏的第二篇文章,主要记录了【注册界面】的实现。界面设计仿微信聊天程序的注册界面,是一个表单,由三个输入框和一个按钮组成,具体UI展示如下图所示:界面布局页面布局使用fxml,采用VBox从上到下布局,中间的表单使用formsfx,所以只需要预留一个StackPane给表单即......
  • 仿微信聊天程序 - 03.登录界面
    本文是仿微信聊天程序专栏的第三篇文章,主要记录了【登录界面】的实现。界面设计仿微信聊天程序的登录界面跟注册界面差不多,只是比注册界面少了一个昵称输入框,如下图所示:界面布局登录界面的界面布局和注册界面的布局差不多,也是使用fxml,采用VBox从上到下布局,中间的表单使用form......
  • 仿微信聊天程序 - 04. 主界面
    本文是仿微信聊天程序专栏的第四篇文章,主要记录了【主界面】的实现。界面设计仿微信聊天程序的主界面总体跟微信的主界面差不多,但是比微信的主界面简单得多,如下图所示:界面布局主界面整个界面采用HBox布局,分为左中右三个部分,最左边是菜单栏,中间是联系人列表或对话信息列表,最右......
  • 仿微信聊天程序 - 05. 聊天列表
    本文是仿微信聊天程序专栏的第五篇文章,主要记录了【聊天列表】的界面实现。界面设计聊天列表在主界面左边,主要显示最近的聊天记录,以及添加好友的信息等,总体界面设计如下:界面布局聊天列表的布局分为两部,列表布局和列表中的每一行的布局,其中列表布局的完整fxml如下:<HBoxprefH......
  • 仿微信聊天程序 - 07. 好友信息
    本文是仿微信聊天程序专栏的第七篇文章,主要记录了【好友信息】的界面实现。界面设计这里的好友信息界面没有处理复杂的功能,仅仅显示好友信息,支持在此界面中发起聊天而已,总体的界面设计如下图所示:界面布局好友信息仅仅只是信息展示,布局相对比较简单,这里采用VBox和HBox组合使用......
  • 仿微信聊天程序 - 06. 好友列表
    本文是仿微信聊天程序专栏的第六篇文章,主要记录了【好友列表】的界面实现。界面设计好友列表在主界面左边,界面UI风格跟聊天列表类似,只不过相比聊天列表更加简单,不需要显示聊天信息,时间等,总体界面设计如下:界面布局跟好友列表一样,聊天列表的布局也分为两部,列表布局和列表中的每......
  • 仿微信聊天程序 - 08. 聊天窗口
    本文是仿微信聊天程序专栏的第八篇文章,主要记录了【聊天窗口】的界面实现。界面设计聊天窗口是整个聊天程序的核心控件,比较复杂,大致可以分为上中下三个部分,上面显示用户昵称以及一些操作菜单,中间是聊天内容显示区域,下面的信息发送的区域,总体界面设计如下:界面布局根据界面设计......