diff --git a/.gitignore b/.gitignore index dcb5930f..a1a007c3 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ yarn-error.log* # dev /data.json /yarn.lock +/pnpm-lock.yaml .idea .vscode diff --git a/blog.config.js b/blog.config.js index 818b9ccb..97057572 100644 --- a/blog.config.js +++ b/blog.config.js @@ -68,6 +68,30 @@ const BLOG = { WIDGET_PET_LINK: 'https://cdn.jsdelivr.net/npm/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json', // 挂件模型地址 @see https://github.com/xiazeyu/live2d-widget-models WIDGET_PET_SWITCH_THEME: true, // 点击宠物挂件切换博客主题 + // 音乐播放插件 + MUSIC_PLAYER: process.env.NEXT_PUBLIC_MUSIC_PLAYER || false, // 是否使用音乐播放插件 + MUSIC_PLAYER_VISIBLE: process.env.NEXT_PUBLIC_MUSIC_PLAYER_VISIBLE || true, // 是否在左下角显示播放和切换,如果使用播放器,打开自动播放再隐藏,就会以类似背景音乐的方式播放,无法取消和暂停 + MUSIC_PLAYER_AUTO_PLAY: process.env.NEXT_PUBLIC_MUSIC_PLAYER_AUTO_PLAY || true, // 是否自动播放,不过自动播放时常不生效(移动设备不支持自动播放) + MUSIC_PLAYER_SHOW_LRC: process.env.NEXT_PUBLIC_MUSIC_PLAYER_SHOW_LRC || false, // 是否展示歌词(前提是有配置歌词路径,对 meting 无效) + MUSIC_PLAYER_ORDER: 'list', // 默认播放方式,顺序 list,随机 random + MUSIC_PLAYER_AUDIO_LIST: [ // 示例音乐列表。除了以下配置外,还可配置歌词,具体配置项看此文档 https://aplayer.js.org/#/zh-Hans/ + { + name: '风を共に舞う気持ち', + artist: 'Falcom Sound Team jdk', + url: 'https://music.163.com/song/media/outer/url?id=731419.mp3', + cover: 'https://p2.music.126.net/kn6ugISTonvqJh3LHLaPtQ==/599233837187278.jpg' + }, + { + name: '王都グランセル', + artist: 'Falcom Sound Team jdk', + url: 'https://music.163.com/song/media/outer/url?id=731355.mp3', + cover: 'https://p1.music.126.net/kn6ugISTonvqJh3LHLaPtQ==/599233837187278.jpg' + } + ], + MUSIC_PLAYER_METING: process.env.NEXT_PUBLIC_MUSIC_PLAYER_METING || false, // 是否要开启 MetingJS,从平台获取歌单。会覆盖自定义的 MUSIC_PLAYER_AUDIO_LIST,更多配置信息:https://github.com/metowolf/MetingJS + MUSIC_PLAYER_METING_SERVER: process.env.NEXT_PUBLIC_MUSIC_PLAYER_METING_SERVER || 'netease', // 音乐平台,[netease, tencent, kugou, xiami, baidu] + MUSIC_PLAYER_METING_ID: process.env.NEXT_PUBLIC_MUSIC_PLAYER_METING_ID || '60198', // 对应歌单的 id + // ----> 评论互动 可同时开启多个支持 WALINE VALINE GISCUS CUSDIS UTTERRANCES GITALK // twikoo diff --git a/components/CommonScript.js b/components/CommonScript.js index ae924fbd..446b0017 100644 --- a/components/CommonScript.js +++ b/components/CommonScript.js @@ -101,6 +101,10 @@ const CommonScript = () => { }} /> >)} + + {/* 引入音乐播放 */} + {JSON.parse(BLOG.MUSIC_PLAYER) && } + {JSON.parse(BLOG.MUSIC_PLAYER) && JSON.parse(BLOG.MUSIC_PLAYER_METING) && } >) } diff --git a/components/MusicPlayer.js b/components/MusicPlayer.js new file mode 100644 index 00000000..7e788639 --- /dev/null +++ b/components/MusicPlayer.js @@ -0,0 +1,7 @@ +import dynamic from 'next/dynamic' + +const MusicPlayer = dynamic( + () => import('@/components/Player'), + { ssr: false } +) +export default MusicPlayer diff --git a/components/Player.js b/components/Player.js new file mode 100644 index 00000000..c85b30a0 --- /dev/null +++ b/components/Player.js @@ -0,0 +1,52 @@ +import React from 'react' +import BLOG from '@/blog.config' + +const Player = () => { + const [player, setPlayer] = React.useState() + const ref = React.useRef(null) + + const showLrc = JSON.parse(BLOG.MUSIC_PLAYER_SHOW_LRC) + const playerVisible = JSON.parse(BLOG.MUSIC_PLAYER_VISIBLE) + const autoPlay = JSON.parse(BLOG.MUSIC_PLAYER_AUTO_PLAY) + + const meting = JSON.parse(BLOG.MUSIC_PLAYER_METING) + + React.useEffect(() => { + if (!meting && window.APlayer) { + setPlayer(new window.APlayer({ + container: ref.current, + fixed: true, + showlrc: showLrc, + autoplay: autoPlay, + order: BLOG.MUSIC_PLAYER_ORDER, + audio: BLOG.MUSIC_PLAYER_AUDIO_LIST + })) + } + return () => { + setPlayer(undefined) + } + }, []) + + return ( +