分类
标签
Alist amd Artalk artalk Astro centos chajian chatgpt cloud torrent clover CommentsByQQ Docker edid fly.io fuwari Github Gotosocial hackintool Hexo hexo lede linux Linux macos Mariadb mastodon memos Memos office opencore openwrt Pleroma QQ机器人 samsung SForum torrent Twikoo typecho V2RAY VPS webhook windows 下载 主控 免驱 博客 厂商 命令 固态 字体 开卡 教程 显卡 梯子 注册 生活 硬盘 硬盘盒 磁力 科学上网 笔记本 自动化 虚拟信用卡 观影 评论 豆瓣 软路由 部署 阿里 阿里悟空 霞鹜文楷 黑苹果
471 字
2 分钟
给博客增加一个观影页面
前言
使用插件构建的观影页面有点不那么喜欢,所以我决定自己写一个。
项目
所使用的的项目地址 https://github.com/bigfa/douban-cf-worker
步骤
首先根据https://github.com/bigfa/douban-cf-worker 中的步骤创建接口
在博客的根目录下新建一个名为
movies
的文件夹,然后在movies
文件夹下新建一个名为index.md
的文件,在文件中写入以下内容:
---
title: 观影
date: 2024-09-11 13:00:56
---
<link rel="stylesheet" href="/movies/movies.css">
<div class="masonry" id="movieContainer">
<!-- 电影项目将被 JavaScript 动态添加到这里 -->
</div>
<script defer src="/movies/movies.js"></script>
- 新建一个
movies.js
文件,在文件中写入以下内容:
// 创建电影项目的HTML
function createMovieItem(movie) {
return `
<div class="item">
<div class="image-container">
<img src="${movie.poster}"
alt="${movie.name}"
onerror="this.onerror=null; this.src='placeholder.jpg';">
</div>
<div class="item-content">
<div class="item-title">
<a href="${movie.link}" target="_blank" rel="noopener noreferrer">${movie.name}</a>
</div>
<div class="item-info">${movie.card_subtitle}</div>
<div class="item-score">豆瓣评分: ${movie.douban_score}</div>
</div>
</div>
`;
}
// 从API获取数据并渲染页面
async function fetchAndRenderMovies() {
try {
const response = await fetch('https://db.imsun.org/list');
const data = await response.json();
// 按豆瓣评分排序(降序)
data.results.sort((a, b) => b.douban_score - a.douban_score);
const container = document.getElementById('movieContainer');
data.results.forEach(movie => {
container.innerHTML += createMovieItem(movie);
});
} catch (error) {
console.error('Error fetching movie data:', error);
document.getElementById('movieContainer').innerHTML = '<p>加载电影数据时出错,请稍后再试。</p>';
}
}
// 页面加载时获取并渲染电影数据
fetchAndRenderMovies();
- 在
movies
文件夹下新建一个名为movies.css
的文件,在文件中写入以下内容:
.masonry {
column-count: 4;
column-gap: 20px;
}
@media (max-width: 1200px) {
.masonry {
column-count: 3;
}
}
@media (max-width: 900px) {
.masonry {
column-count: 2;
}
}
@media (max-width: 600px) {
.masonry {
column-count: 1;
}
}
.item {
position: relative;
overflow: hidden;
}
.image-container {
position: relative;
width: 100%;
padding-top: 150%; /* 2:3 宽高比 */
overflow: hidden;
}
.image-container img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease-in-out;
}
.item-content {
position: absolute;
font-size: 12px;
bottom: 0;
left: 0;
width: auto;
background-color: rgba(0, 0, 0, 0.7);
color: white;
padding: 10px;
transform: translateY(100%);
transition: transform 0.3s ease-in-out;
}
.item:hover .item-content {
transform: translateY(0);
}
.item:hover .image-container img {
transform: scale(1.1);
}
.item-title a {
color: white;
text-decoration: none;
font-size: 20px;
}
.item-title a:hover {
text-decoration: underline;
}
如此即可大功告成了