Simonzhangs' blog Simonzhangs' blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Simonzhangs

前端学习探索者
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Vuepress音乐播放器插件

    • 个性化Vuepress音乐播放器插件
    • 插件介绍与配置
    • 关于个性化样式
      • immersive-music-player 播放样式设计
      • 扩展 —— Vue 的生命周期之 created()做了啥?
    • Vuepress插件我所做的优化
    • 为什么选择howerjs音频库
  • Apple Music 高颜值在线音乐播放器

  • 学生助手浏览器插件

  • 用户管理系统

  • 作品集
  • Vuepress音乐播放器插件
simonzhangs
2022-05-03
目录

关于个性化样式

# immersive-music-player 播放样式设计

为了更好地个性化配置音乐播放器,immersive-music-player 开发了配置音乐播放进度条样式啦!!!在这里记录一下自己开发的思路。

开发的难点在于:播放样式主题配置开放给了配置者, 要注意校验输入的合法性,同时如何将输入的配置转化为样式,所有样式不能写死了。

  1. 通过 vuepress 的 options 钩子,获取到用户输入的配置参数
const { resolve } = require("path");

module.exports = (options, context) => ({
  define() {
    const { sliderStyle = "Nyancat", playListID = 633015043 } = options;

    return {
      SLIDER_STYLE: sliderStyle,
      PLAYLIST_ID: playListID,
    };
  },
  name: "vuepress-plugin-immersive-music-player",
  enhanceAppFiles: resolve(__dirname, "./bin/enhanceAppFile.js"),
  globalUIComponents: "szPlayer",
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

通过 options 钩子获取用户配置的播放进度条样式和播放歌单 ID,同时也需要定义默认的参数,用户也可以选择不进行配置。

  1. 判断用户输入是否合法
barStyle() {
    // 样式判断
    if (
        [
          "isMario", "spitRainbow", "rainbow", "nyancat"
        ].includes(this.sliderStyle)
    ){
        // ......
    }
1
2
3
4
5
6
7
8
9

在这里通过includes方法来判断用户配置项是否合法,并进行后续样式计算等步骤。

提示

在开放配置的时候,这里就要注意前端安全方面的知识了,不能完全信任用户输入的内容,需要对用户的输入进行过滤或转译,要不然很容易被XSS攻击。关于XSS攻击和CSRF攻击:Web开发常见攻击及应对方法 (opens new window)

后面开放输入歌单ID自定义播放时,input采用的是number类型,只能输入数字,避免利用输入对网站进行攻击,算是比较偷懒的保护措施。

  1. 利用Vue生命周期,计算样式属性并绑定在DOM上

判断合法性后,利用计算属性来为播放进度条添加样式:

barStyle() {
      // 样式判断
      if (
        [
          "isMario", "spitRainbow", "rainbow", "nyancat"
        ].includes(this.sliderStyle)
      ) {
        if (this.sliderStyle === "isMario") {
          return {
            mario: true,
            "mario-stop": !this.player._playing,
          };
        }
        // ......
      }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

并把计算属性得到的样式类绑定在 DOM 元素上,将不同样式写在 css 文件中,这样就完成了个性化播放进度条样式的开发啦!

created 期间初始化顺序:合法校验 props -- methods 代理到 vm 实例 -- 检验 data - computed -- watch

# 扩展 —— Vue 的生命周期之 created()做了啥?

在开发过程中,对Vue的created 这个生命周期比较好奇,笼统的来说是进行了初始化,这个时候已经可以访问data()中的this了,但同时还包括computed计算属性,watch、methods,这些初始化顺序是什么样的呢?

# 关于同一个域名下页面通信

因为开发之后发现多开几个页面的话,每个音乐都会初始化播放,会导致多个页面同时播放,进度也不会被存储。这样肯定是不行的啊。

编辑 (opens new window)
上次更新: 2022/05/04, 21:37:45
插件介绍与配置
Vuepress插件我所做的优化

← 插件介绍与配置 Vuepress插件我所做的优化→

最近更新
01
一些有意思的类比
06-16
02
the-super-tiny-compiler解析
06-06
03
计算机编译原理总概
06-06
更多文章>
Theme by Vdoing | Copyright © 2021-2022
蜀ICP备2021023197号-2
Simonzhans | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜