fix(ui): apply mount animation inside each page component to avoid skeleton interception
This commit is contained in:
parent
d361bca220
commit
46860f7c41
@ -60,12 +60,8 @@ pub fn FrontendLayout() -> Element {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
main { class: "flex-1 w-full max-w-4xl mx-auto px-6 py-6 md:py-12 overflow-hidden",
|
main { class: "flex-1 w-full max-w-4xl mx-auto px-6 py-6 md:py-12 overflow-hidden",
|
||||||
div {
|
|
||||||
key: "{route}",
|
|
||||||
class: "animate-page-enter",
|
|
||||||
SuspenseBoundary { fallback: move |_| route_skeleton(&route), Outlet::<Route> {} }
|
SuspenseBoundary { fallback: move |_| route_skeleton(&route), Outlet::<Route> {} }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Footer {}
|
Footer {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,7 @@ use dioxus::prelude::*;
|
|||||||
#[component]
|
#[component]
|
||||||
pub fn About() -> Element {
|
pub fn About() -> Element {
|
||||||
rsx! {
|
rsx! {
|
||||||
|
div { class: "animate-page-enter",
|
||||||
header { class: "page-header mb-6",
|
header { class: "page-header mb-6",
|
||||||
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "关于" }
|
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "关于" }
|
||||||
}
|
}
|
||||||
@ -20,4 +21,5 @@ pub fn About() -> Element {
|
|||||||
p { "世界……遗忘我……" }
|
p { "世界……遗忘我……" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -101,11 +101,13 @@ fn group_posts(posts: &[PostListItem]) -> Vec<YearGroup> {
|
|||||||
#[component]
|
#[component]
|
||||||
pub fn Archives() -> Element {
|
pub fn Archives() -> Element {
|
||||||
rsx! {
|
rsx! {
|
||||||
|
div { class: "animate-page-enter",
|
||||||
header { class: "page-header mb-6",
|
header { class: "page-header mb-6",
|
||||||
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "归档" }
|
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "归档" }
|
||||||
}
|
}
|
||||||
ArchivesContent {}
|
ArchivesContent {}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 归档页面内容组件。
|
/// 归档页面内容组件。
|
||||||
|
|||||||
@ -40,9 +40,11 @@ pub fn HomePage(page: i32) -> Element {
|
|||||||
let current_page = page.max(1);
|
let current_page = page.max(1);
|
||||||
|
|
||||||
rsx! {
|
rsx! {
|
||||||
|
div { class: "animate-page-enter",
|
||||||
HomeInfo {}
|
HomeInfo {}
|
||||||
HomePosts { current_page }
|
HomePosts { current_page }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 首页文章列表与分页展示组件。
|
/// 首页文章列表与分页展示组件。
|
||||||
|
|||||||
@ -41,7 +41,7 @@ pub fn PostDetail(slug: String) -> Element {
|
|||||||
match post_data {
|
match post_data {
|
||||||
Some(Ok(post)) => {
|
Some(Ok(post)) => {
|
||||||
rsx! {
|
rsx! {
|
||||||
article { class: "post-single", key: "{post.slug}",
|
article { class: "post-single animate-page-enter", key: "{post.slug}",
|
||||||
PostHeader { post: post.clone() }
|
PostHeader { post: post.clone() }
|
||||||
|
|
||||||
// 如果文章设置了封面图,则渲染封面组件。
|
// 如果文章设置了封面图,则渲染封面组件。
|
||||||
|
|||||||
@ -44,6 +44,7 @@ pub fn Search() -> Element {
|
|||||||
};
|
};
|
||||||
|
|
||||||
rsx! {
|
rsx! {
|
||||||
|
div { class: "animate-page-enter",
|
||||||
header { class: "page-header mb-6",
|
header { class: "page-header mb-6",
|
||||||
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "搜索" }
|
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "搜索" }
|
||||||
}
|
}
|
||||||
@ -85,7 +86,7 @@ pub fn Search() -> Element {
|
|||||||
} else if search_res().as_ref().map(|r| r.is_err()).unwrap_or(false) {
|
} else if search_res().as_ref().map(|r| r.is_err()).unwrap_or(false) {
|
||||||
div { class: "text-center text-red-500 dark:text-red-400 py-20", "搜索失败" }
|
div { class: "text-center text-red-500 dark:text-red-400 py-20", "搜索失败" }
|
||||||
} else {
|
} else {
|
||||||
div { class: "flex flex-col items-center justify-center mt-24 mb-12 page-enter",
|
div { class: "flex flex-col items-center justify-center mt-24 mb-12",
|
||||||
img {
|
img {
|
||||||
class: "w-56 h-auto rounded-lg select-none dark:brightness-90",
|
class: "w-56 h-auto rounded-lg select-none dark:brightness-90",
|
||||||
src: "/images/xiantiaoxiaogou_02.webp",
|
src: "/images/xiantiaoxiaogou_02.webp",
|
||||||
@ -95,4 +96,5 @@ pub fn Search() -> Element {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,11 +27,13 @@ use crate::router::Route;
|
|||||||
#[component]
|
#[component]
|
||||||
pub fn Tags() -> Element {
|
pub fn Tags() -> Element {
|
||||||
rsx! {
|
rsx! {
|
||||||
|
div { class: "animate-page-enter",
|
||||||
header { class: "page-header mb-6",
|
header { class: "page-header mb-6",
|
||||||
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "标签" }
|
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "标签" }
|
||||||
}
|
}
|
||||||
TagsContent {}
|
TagsContent {}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 标签云内容组件。
|
/// 标签云内容组件。
|
||||||
@ -105,11 +107,13 @@ fn TagsContent() -> Element {
|
|||||||
#[component]
|
#[component]
|
||||||
pub fn TagDetail(tag: String) -> Element {
|
pub fn TagDetail(tag: String) -> Element {
|
||||||
rsx! {
|
rsx! {
|
||||||
|
div { class: "animate-page-enter",
|
||||||
header { class: "page-header mb-6",
|
header { class: "page-header mb-6",
|
||||||
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "{tag}" }
|
h1 { class: "text-4xl font-bold text-paper-primary tracking-tight", "{tag}" }
|
||||||
}
|
}
|
||||||
TagDetailContent { tag: tag.clone() }
|
TagDetailContent { tag: tag.clone() }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 标签详情内容组件。
|
/// 标签详情内容组件。
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user