IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 10月21号、22号、23号三天PC端云音乐项目总结 -> 正文阅读

[JavaScript知识库]10月21号、22号、23号三天PC端云音乐项目总结

🥰这三天完成的效果图

🌈三天的内容及遇到的问题

1、🔥完成滚动条触底,加载数据

  • 控制浏览器滚动条?
window.addEventListener('scroll',() => {
    // 滚动视口高度(也就是当前元素的真实高度)
    let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
    // 可见区域高度
    let clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    // 滚动条顶部到浏览器顶部高度
    let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
    if(clientHeight + Math.floor(scrollTop) == scrollHeight){
       this.getMvComment();
    }
})
  • 控制指定滚动条?
<style>
  #container {
    position: absolute;
    top: 0;
    bottom: 0;
    width: auto;
    left: 0;
    right: 0;
    overflow-y: auto;
    overflow-x: hidden;
    height: 300px;
    width: 1000px;
  }
  #foo {
    height: 1000px;
    width: 1000px;
    background-color: #777;
    display: block;
  }
  .test {
    width: 1000px;
    height: 1000px;
  }
</style>
<div id="container">
  <div id="foo">12334</div>
</div>
<div class="test"></div>
<script>
  let container = document.getElementById("container");
  container.onscroll = function () {
    // 滚动视口高度(也就是当前元素的真实高度)
     let scrollHeight = container.scrollHeight || container.scrollHeight;
     // 可见区域高度
     let clientHeight = container.clientHeight;
     // 滚动条顶部到浏览器顶部高度
     let scrollTop = container.scrollTop;
     if(clientHeight + scrollTop == scrollHeight){
        console.log('滚动条触底了')
     }
  };
</script>
  • 修改滚动条样式?
.el::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}

.el::-webkit-scrollbar-track {
    background-color: rgba(73, 177, 245, 0.2);
    border-radius: 2em;
}

.el::-webkit-scrollbar-thumb {
    background-color: #31c27c;
    background-image: -webkit-linear-gradient( 45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent);
    border-radius: 2em;
}

.el::-webkit-scrollbar-corner {
    background-color: transparent;
}

.el::-moz-selection {
    color: #fff;
    background-color: #31c27c;
}

这里需要注意的点是:?添加了监听器,单离开页面是需要将定时器清除掉?,不然会在其他页面造成不必要的影响。使用 beforeDestroy 生命周期函数清除定时器。

2、🔥解决在 App.vue 中无法动态获取 vuex 的数据

在 App.vue 给 vuex 添加一个监听器,即可实现动态监听💪🏻

  watch: {
     // 监听 vuex 中 loading 的变化, 使其能够动态赋值给 data 数据中
    '$store.state.loading': function() {
       this.isloading = this.$store.state.loading;
    }
  },

3、🔥跳转同一页面数据不更新渲染

之前也是遇到这问题,这个是 Vue 的特性,因为同一页面引用相同组件导致页面是不会刷新的

?一开始为了避免出现这个问题,在跳转页面时,我就给路径添加了动态时间,使得路由发生变化进而导致页面刷新,但这个还是不行,也不知道怎么回事🤣。

最后,直接在 APP.vue 中添加了一个 :key值,然后就可以实现刷新了,但这样有一个不好的地方就是,没跳转一个页面都进行刷新。不是很好。🤣

<div id="app" :key="$route.fullPath"></div>

这里的原理是,?通过路径的改变进而使 :key值发生改变,从而是页面重新渲染?。(换句话说,在Vue中,页面是否渲染,取绝于:key值是否变化)

这里的话先这样解决,后期我在看看是什么问题。🤣

4、 🔥抽离组件

将之前组件抽离出MV组件歌单组件 正是这个骚操作,导致了下面一个问题出现🤣
增加了评论框组件登录组件

5、🔥无法监听父组件传递来的数据变化

MV组件歌单组件 中有一个播放量需要进行转换,为了方便,我直接在子组件这里使用 watch监听数据的变化后,在来处理,但实际上压根就没触发这个事件。

原因就是:?vue为单向数据流,数据从父级组件传递给子组件,只能单向绑定,子组件内部不能直接修改从父级传递过来的数据

// 子组件
let child = {
   name: "child",
   props: {
      name: String,
      age: Number,
   },
   template: `<span>名字:{{name}} 年龄:{{age}}</span>`,
   watch: {
       // 监听不到
       name: function() {
           console.log(this.age); // 没有输出
           // 处理值
           this.age =  this.formData(this.age); // 没有修改
       }
   },
   methods: {
       formData(age) {
           return name + "岁"
       }
   },
}
// 父组件
new Vue({
    el: "#app",
    data:{
        obj: {
            name:"小明",
            age: 12,
        }
    },
    components:{
        // 子组件
        child,
    }
})

6、🔥部署 网易云API 到自己的服务器上

之前是部署在 vercel 的 https://cloud-music-api-sandy.vercel.app/ 现在是部署在自己的服务器上,使用 pm2 对程序进行管理

7、🔥Cannot read property ‘cancelToken‘ of undefined“

这个报错是我在对 axios 添加请求拦截器时,报的错误,主要讲 config 返回出去就不会报错了👍🏻

// 请求拦截器
axios.interceptors.request.use(function (config) {
  store.dispatch("saveLoadingFlag", true);
  // 必须返回 config 不然会报错
  return config;
}, function (error) {
  return Promise.reject(error);
})

🌈总结

这三天就完成了三个页面,而且布局都比较简单🤣。三个页面其中两个页面是在23号花了一个下午的时间完成的。这也取绝于前期我将组件重新在抽离了出三个公共组件MV卡片组件歌单卡片组件评论条组件。在加上之前将 axios 进行二次封装,速度也提高了很多。但目前看,还是有一些代码比较冗余,而且在该一些东西时,一改动一个小地方,接连要改很多地方。(比如:修改路由,修改方法名等)。后期的话,会针对这些不足进行改造。下周主要是攻克音乐模块的播放及进度条拖拽实现歌词联动等功能。💪🏻

PC端云音乐专栏

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 14:50:47  更:2021-10-24 14:52:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 2:07:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码