anilife.live 사이트 구현

다른 버그도 고침
This commit is contained in:
2025-12-28 19:38:18 +09:00
parent e6e8c45f5a
commit 6dbeff13d3
14 changed files with 1576 additions and 347 deletions

View File

@@ -182,8 +182,12 @@
tmp = '<div class="col-6 col-sm-4 col-md-3">';
tmp += '<div class="card">';
// tmp += '<img class="lozad" data-src="' + data.anime_list[i].image_link + '" />';
tmp += '<img class="lazyload" src="../static/img_loader_x200.svg" data-original="' + data.anime_list[i].image_link + '" style="cursor: pointer" onclick="location.href=\'./request?code=' + data.anime_list[i].code + '\'"/>';
// 이미지 프록시를 통해 CDN 이미지 로드 (hotlink 보호 우회)
let airingImgUrl = data.anime_list[i].image_link;
if (airingImgUrl && airingImgUrl.includes('cdn.anilife.live')) {
airingImgUrl = '/' + package_name + '/ajax/' + sub + '/proxy_image?url=' + encodeURIComponent(airingImgUrl);
}
tmp += '<img class="lazyload" src="../static/img_loader_x200.svg" data-original="' + airingImgUrl + '" style="cursor: pointer" onerror="this.src=\'../static/img_loader_x200.svg\'" onclick="location.href=\'./request?code=' + data.anime_list[i].code + '\'"/>';
tmp += '<div class="card-body">'
// {#tmp += '<button id="code_button" data-code="' + data.episode[i].code + '" type="button" class="btn btn-primary code-button bootstrap-tooltip" data-toggle="button" data-tooltip="true" aria-pressed="true" autocomplete="off" data-placement="top">' +#}
// {# '<span data-tooltip-text="'+data.episode[i].title+'">' + data.episode[i].code + '</span></button></div>';#}
@@ -244,7 +248,12 @@
tmp = '<div class="col-sm-4">';
tmp += '<div class="card">';
tmp += '<img class="card-img-top" src="' + data.anime_list[i].image_link + '" />';
// 이미지 프록시를 통해 CDN 이미지 로드 (hotlink 보호 우회)
let imgUrl = data.anime_list[i].image_link;
if (imgUrl && imgUrl.includes('cdn.anilife.live')) {
imgUrl = '/' + package_name + '/ajax/' + sub + '/proxy_image?url=' + encodeURIComponent(imgUrl);
}
tmp += '<img class="card-img-top" src="' + imgUrl + '" onerror="this.src=\'../static/img_loader_x200.svg\'" />';
tmp += '<div class="card-body">'
// {#tmp += '<button id="code_button" data-code="' + data.episode[i].code + '" type="button" class="btn btn-primary code-button bootstrap-tooltip" data-toggle="button" data-tooltip="true" aria-pressed="true" autocomplete="off" data-placement="top">' +#}
// {# '<span data-tooltip-text="'+data.episode[i].title+'">' + data.episode[i].code + '</span></button></div>';#}
@@ -290,7 +299,12 @@
tmp = '<div class="col-sm-4">';
tmp += '<div class="card">';
tmp += '<img class="card-img-top" src="' + data.anime_list[i].image_link + '" />';
// 이미지 프록시를 통해 CDN 이미지 로드 (hotlink 보호 우회)
let screenImgUrl = data.anime_list[i].image_link;
if (screenImgUrl && screenImgUrl.includes('cdn.anilife.live')) {
screenImgUrl = '/' + package_name + '/ajax/' + sub + '/proxy_image?url=' + encodeURIComponent(screenImgUrl);
}
tmp += '<img class="card-img-top" src="' + screenImgUrl + '" onerror="this.src=\'../static/img_loader_x200.svg\'" />';
tmp += '<div class="card-body">'
tmp += '<h5 class="card-title">' + data.anime_list[i].title + '</h5>';
tmp += '<p class="card-text">' + data.anime_list[i].code + '</p>';
@@ -719,12 +733,76 @@
margin-top: 10px;
}
/* 카드 레이아웃 개선 */
.card {
height: 100%;
display: flex;
flex-direction: column;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
transition: transform 0.3s ease, box-shadow 0.3s ease;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
margin-bottom: 20px;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
}
/* 이미지 고정 비율 (3:4 포스터 비율) */
.card img,
.card .card-img-top,
.card .lazyload {
width: 100%;
aspect-ratio: 3 / 4;
object-fit: cover;
border-radius: 12px 12px 0 0;
}
.card-body {
padding: 0 !important;
padding: 12px !important;
flex-grow: 1;
display: flex;
flex-direction: column;
background: rgba(0, 0, 0, 0.6);
}
.card-title {
padding: 1rem !important;
padding: 0 !important;
margin-bottom: 8px;
font-size: 0.95rem;
font-weight: 600;
color: #fff;
line-height: 1.3;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.card-text {
font-size: 0.8rem;
color: rgba(255, 255, 255, 0.7);
margin-bottom: 4px;
}
.card .btn-primary {
margin-top: auto;
border-radius: 8px;
font-size: 0.85rem;
padding: 8px 12px;
}
/* 그리드 간격 조정 */
.row.infinite-scroll {
gap: 0;
}
.row.infinite-scroll > [class*="col-"] {
padding: 10px;
}
button#add_whitelist {