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 2bbd9f85..6f8c0871 100644
--- a/blog.config.js
+++ b/blog.config.js
@@ -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,
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 4438697e..c24fa5c9 100644
--- a/pages/_document.js
+++ b/pages/_document.js
@@ -14,7 +14,6 @@ class MyDocument extends Document {
-
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