diff --git a/.env.local b/.env.local index a8cf9114..03b38e30 100644 --- a/.env.local +++ b/.env.local @@ -1,2 +1,2 @@ # 环境变量 @see https://www.nextjs.cn/docs/basic-features/environment-variables -NEXT_PUBLIC_VERSION=3.8.2 +NEXT_PUBLIC_VERSION=3.9.0 diff --git a/blog.config.js b/blog.config.js index 5f3270bf..02866633 100644 --- a/blog.config.js +++ b/blog.config.js @@ -1,25 +1,25 @@ // 注: process.env.XX是Vercel的环境变量,配置方式见:https://docs.tangly1024.com/zh/features/personality const BLOG = { // Important page_id!!!Duplicate Template from https://www.notion.so/tanghh/02ab3b8678004aa69e9e415905ef32a5 - NOTION_PAGE_ID: process.env.NOTION_PAGE_ID || '02ab3b8678004aa69e9e415905ef32a5', + NOTION_PAGE_ID: process.env.NOTION_PAGE_ID || 'fb7bf0cd0563410e862e5ee67b8a8d33', PSEUDO_STATIC: false, // 伪静态路径,开启后所有文章URL都以 .html 结尾。 NEXT_REVALIDATE_SECOND: process.env.NEXT_PUBLIC_REVALIDATE_SECOND || 5, // 更新内容缓存间隔 单位(秒);即每个页面有5秒的纯静态期、此期间无论多少次访问都不会抓取notion数据;调大该值有助于节省Vercel资源、同时提升访问速率,但也会使文章更新有延迟。 THEME: process.env.NEXT_PUBLIC_THEME || 'hexo', // 主题, 支持 ['next','hexo',"fukasawa','medium','example'] @see https://preview.tangly1024.com THEME_SWITCH: process.env.NEXT_PUBLIC_THEME_SWITCH || false, // 是否显示切换主题按钮 LANG: 'zh-CN', // e.g 'zh-CN','en-US' see /lib/lang.js for more. - SINCE: 2021, // e.g if leave this empty, current year will be used. - APPEARANCE: 'light', // ['light', 'dark', 'auto'], // light 日间模式 , dark夜间模式, auto根据时间和主题自动夜间模式 + SINCE: 2022, // e.g if leave this empty, current year will be used. + APPEARANCE: 'auto', // ['light', 'dark', 'auto'], // light 日间模式 , dark夜间模式, auto根据时间和主题自动夜间模式 - AUTHOR: 'tangly1024', // 作者 + AUTHOR: 'Vixcity', // 作者 BIO: '一个普通的干饭人🍚', // 作者简介 - LINK: 'https://tangly1024.com', // 网站地址 + LINK: 'https://bolg.vixcitycc.top/', // 网站地址 KEYWORDS: 'Notion, 博客', // 网站关键词 英文逗号隔开 // 社交链接,不需要可留空白,例如 CONTACT_WEIBO:'' - CONTACT_EMAIL: 'mail@tangly1024.com', // 邮箱 + CONTACT_EMAIL: '2091283625@qq.com', // 邮箱 CONTACT_WEIBO: '', // 你的微博个人主页 CONTACT_TWITTER: '', // 你的twitter个人主页 - CONTACT_GITHUB: 'https://github.com/tangly1024', // 你的github个人主页 - CONTACT_TELEGRAM: 'https://t.me/tangly_1024', // 你的telegram 地址 例如 https://t.me/tangly_1024 + CONTACT_GITHUB: 'https://github.com/Vixcity', // 你的github个人主页 + CONTACT_TELEGRAM: '', // 你的telegram 地址 例如 https://t.me/tangly_1024 CONTACT_LINKEDIN: '', // 你的linkedIn 首页 // 网站默认使用PingFangSC及NotoSansSC, @@ -30,6 +30,10 @@ const BLOG = { CUSTOM_FONT_SANS: ['LXGW WenKai'], // 自定义无衬线字体 CUSTOM_FONT_SERIF: ['LXGW WenKai'], // 自定义衬线字体 + // 自定义外部脚本,外部样式 + CUSTOM_EXTERNAL_JS: [''], // e.g. ['http://xx.com/script.js','http://xx.com/script.js'] + CUSTOM_EXTERNAL_CSS: [''], // e.g. ['http://xx.com/style.css','http://xx.com/style.css'] + // 侧栏布局 是否反转(左变右,右变左) 已支持主题: hexo next medium fukasawa example LAYOUT_SIDEBAR_REVERSE: false, @@ -56,19 +60,19 @@ const BLOG = { POST_LIST_PREVIEW: process.env.NEXT_PUBLIC_POST_PREVIEW || 'false', // 是否在列表加载文章预览 POST_PREVIEW_LINES: 12, // 预览博客行数 POST_RECOMMEND_COUNT: 6, // 推荐文章数量 - POSTS_PER_PAGE: 12, // post counts per page - POSTS_SORT_BY: 'notion', // 排序方式 'date'按时间,'notion'由notion控制 + POSTS_PER_PAGE: 10, // post counts per page + POSTS_SORT_BY: 'date', // 排序方式 'date'按时间,'notion'由notion控制 PREVIEW_CATEGORY_COUNT: 16, // 首页最多展示的分类数量,0为不限制 PREVIEW_TAG_COUNT: 16, // 首页最多展示的标签数量,0为不限制 // 鼠标点击烟花特效 - FIREWORKS: process.env.NEXT_PUBLIC_FIREWORKS || false, // 开关 + FIREWORKS: process.env.NEXT_PUBLIC_FIREWORKS || true, // 开关 // 烟花色彩,感谢 https://github.com/Vixcity 提交的色彩 FIREWORKS_COLOR: ['255, 20, 97', '24, 255, 146', '90, 135, 255', '251, 243, 140'], // 樱花飘落特效 - SAKURA: process.env.NEXT_PUBLIC_SAKURA || false, // 开关 + SAKURA: process.env.NEXT_PUBLIC_SAKURA || true, // 开关 // 漂浮线段特效 NEST: process.env.NEXT_PUBLIC_NEST || true, // 开关 @@ -79,15 +83,23 @@ const BLOG = { RIBBON: process.env.NEXT_PUBLIC_RIBBON || false, // 开关 // 星空雨特效 黑夜模式才会生效 - STARRY_SKY: process.env.NEXT_PUBLIC_STARRY_SKY || false, // 开关 + STARRY_SKY: process.env.NEXT_PUBLIC_STARRY_SKY || true, // 开关 // 样式代码 CSS_LIST: [''], // 悬浮挂件 WIDGET_PET: process.env.NEXT_PUBLIC_WIDGET_PET || true, // 是否显示宠物挂件 - 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, // 点击宠物挂件切换博客主题 + WIDGET_PET_LINK: 'https://cdn.jsdelivr.net/npm/live2d-widget-model-unitychan@1.0.5/assets/unitychan.model.json', // 挂件模型地址 @see https://github.com/xiazeyu/live2d-widget-models + // 好看的主题 + // https://cdn.jsdelivr.net/npm/live2d-widget-model-ni-j@1.0.5/assets/ni-j.model.json + // https://cdn.jsdelivr.net/npm/live2d-widget-model-nipsilon@1.0.5/assets/nipsilon.model.json + // https://cdn.jsdelivr.net/npm/live2d-widget-model-nito@1.0.5/assets/nito.model.json + // https://cdn.jsdelivr.net/npm/live2d-widget-model-shizuku@1.0.5/assets/shizuku.model.json + // https://cdn.jsdelivr.net/npm/live2d-widget-model-unitychan@1.0.5/assets/unitychan.model.json + // https://cdn.jsdelivr.net/npm/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json + // https://cdn.jsdelivr.net/npm/live2d-widget-model-haruto@1.0.5/assets/haruto.model.json + WIDGET_PET_SWITCH_THEME: false, // 点击宠物挂件切换博客主题 // 音乐播放插件 MUSIC_PLAYER: process.env.NEXT_PUBLIC_MUSIC_PLAYER || false, // 是否使用音乐播放插件 @@ -194,9 +206,9 @@ const BLOG = { // 作废配置 AVATAR: '/avatar.png', // 作者头像,被notion中的ICON覆盖。若无ICON则取public目录下的avatar.png - TITLE: process.env.NEXT_PUBLIC_TITLE || 'NotionNext BLOG', // 站点标题 ,被notion中的页面标题覆盖 + TITLE: process.env.NEXT_PUBLIC_TITLE || 'VIXCITY BLOG', // 站点标题 ,被notion中的页面标题覆盖 HOME_BANNER_IMAGE: './bg_image.jpg', // 首页背景大图, 会被notion中的封面图覆盖,若无封面图则会使用代码中的 /public/bg_image.jpg 文件 - DESCRIPTION: process.env.NEXT_PUBLIC_DESCRIPTION || '这是一个由NotionNext生成的站点', // 站点描述,被notion中的页面描述覆盖 + DESCRIPTION: process.env.NEXT_PUBLIC_DESCRIPTION || '我的小破博客', // 站点描述,被notion中的页面描述覆盖 // 开发相关 NOTION_ACCESS_TOKEN: process.env.NOTION_ACCESS_TOKEN || '', // Useful if you prefer not to make your database public diff --git a/components/ExternalScript.js b/components/ExternalScript.js new file mode 100644 index 00000000..b8253726 --- /dev/null +++ b/components/ExternalScript.js @@ -0,0 +1,25 @@ +import BLOG from '@/blog.config' +import { loadExternalResource } from '@/lib/utils' +import React from 'react' + +/** + * 自定义引入外部JS 和 CSS + * @returns + */ +const ExternalScript = () => { + React.useEffect(() => { + if (BLOG.CUSTOM_EXTERNAL_JS && BLOG.CUSTOM_EXTERNAL_JS.length > 0) { + for (const url of BLOG.CUSTOM_EXTERNAL_JS) { + loadExternalResource(url, 'js') + } + } + if (BLOG.CUSTOM_EXTERNAL_CSS && BLOG.CUSTOM_EXTERNAL_CSS.length > 0) { + for (const url of BLOG.CUSTOM_EXTERNAL_CSS) { + loadExternalResource(url, 'css') + } + } + }, []) + return null +} + +export default ExternalScript diff --git a/package.json b/package.json index 4dca8b5b..611d0921 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "notion-next", - "version": "3.8.2", + "version": "3.9.0", "homepage": "https://github.com/tangly1024/NotionNext.git", "license": "MIT", "repository": { diff --git a/pages/_app.js b/pages/_app.js index f0eedb2c..eee3dad6 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -31,6 +31,7 @@ import { Ribbon } from '@/components/Ribbon' import { Sakura } from '@/components/Sakura' import { StarrySky } from '@/components/StarrySky' import MusicPlayer from '@/components/MusicPlayer' +import ExternalScript from '@/components/ExternalScript' const Ackee = dynamic(() => import('@/components/Ackee'), { ssr: false }) const Gtag = dynamic(() => import('@/components/Gtag'), { ssr: false }) @@ -59,6 +60,7 @@ const MyApp = ({ Component, pageProps }) => { {JSON.parse(BLOG.NEST) && } {JSON.parse(BLOG.FLUTTERINGRIBBON) && } {JSON.parse(BLOG.RIBBON) && } + // 默认Webfont: 请在font.js文件中检查font-family 新版改从npm本地导入; diff --git a/pages/_document.js b/pages/_document.js index d963fc40..164a4fe2 100644 --- a/pages/_document.js +++ b/pages/_document.js @@ -13,8 +13,7 @@ class MyDocument extends Document { return ( - - + {console.log(this.renderCSS())} {this.renderCSS()} diff --git a/styles/notion.css b/styles/notion.css index 24f15562..2be54923 100644 --- a/styles/notion.css +++ b/styles/notion.css @@ -700,6 +700,10 @@ svg.notion-page-icon { max-width: 100%; } +.notion-asset-wrapper-image > div { + height: auto !important; +} + .notion-asset-wrapper-full { /* max-width: 100vw; */ } diff --git a/themes/hexo/components/Header.js b/themes/hexo/components/Header.js index bf5e5d09..fa2c5e39 100644 --- a/themes/hexo/components/Header.js +++ b/themes/hexo/components/Header.js @@ -15,7 +15,6 @@ const Header = props => { const [typed, changeType] = useState() const { siteInfo } = props useEffect(() => { - scrollTrigger() updateHeaderHeight() if (!typed && window && document.getElementById('typed')) { changeType( @@ -29,45 +28,20 @@ const Header = props => { }) ) } - window.addEventListener('scroll', scrollTrigger) + if (enableAutoScroll) { + scrollTrigger() + window.addEventListener('scroll', scrollTrigger) + } + window.addEventListener('resize', updateHeaderHeight) return () => { - window.removeEventListener('scroll', scrollTrigger) + if (enableAutoScroll) { + window.removeEventListener('scroll', scrollTrigger) + } window.removeEventListener('resize', updateHeaderHeight) } }) - const autoScrollEnd = () => { - if (autoScroll) { - windowTop = window.scrollY - autoScroll = false - } - } - - /** - * 自动吸附滚动,移动端体验不好暂时关闭 - */ - const scrollTrigger = () => { - if (screen.width <= 768) { - return - } - - const scrollS = window.scrollY - // 自动滚动 - if ((scrollS > windowTop) & (scrollS < window.innerHeight) && !autoScroll - ) { - autoScroll = true - window.scrollTo({ top: wrapperTop, behavior: 'smooth' }) - setTimeout(autoScrollEnd, 500) - } - if ((scrollS < windowTop) && (scrollS < window.innerHeight) && !autoScroll) { - autoScroll = true - window.scrollTo({ top: 0, behavior: 'smooth' }) - setTimeout(autoScrollEnd, 500) - } - windowTop = scrollS - } - function updateHeaderHeight () { setTimeout(() => { const wrapperElement = document.getElementById('wrapper') @@ -106,4 +80,37 @@ const Header = props => { ) } +const enableAutoScroll = false // 是否开启自动吸附滚动 + +const autoScrollEnd = () => { + if (autoScroll) { + windowTop = window.scrollY + autoScroll = false + } +} + +/** + * 自动吸附滚动,移动端体验不好暂时关闭 + */ +const scrollTrigger = () => { + if (screen.width <= 768) { + return + } + + const scrollS = window.scrollY + // 自动滚动 + if ((scrollS > windowTop) & (scrollS < window.innerHeight) && !autoScroll + ) { + autoScroll = true + window.scrollTo({ top: wrapperTop, behavior: 'smooth' }) + setTimeout(autoScrollEnd, 500) + } + if ((scrollS < windowTop) && (scrollS < window.innerHeight) && !autoScroll) { + autoScroll = true + window.scrollTo({ top: 0, behavior: 'smooth' }) + setTimeout(autoScrollEnd, 500) + } + windowTop = scrollS +} + export default Header