|
|
<!DOCTYPE html> |
|
|
<html lang="zh-CN"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>短视频无水印解析</title> |
|
|
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@300;400;600;700&family=Kiwi+Maru:wght@300;400;500&display=swap" rel="stylesheet"> |
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
|
<style> |
|
|
:root { |
|
|
--primary-color: #7c4dff; |
|
|
--primary-light: rgba(124, 77, 255, 0.2); |
|
|
--primary-dark: #5e35b1; |
|
|
--text-color: #333; |
|
|
--bg-color: rgba(255, 255, 255, 0.7); |
|
|
--card-bg: rgba(255, 255, 255, 0.8); |
|
|
--shadow-color: rgba(0, 0, 0, 0.1); |
|
|
--border-color: rgba(0, 0, 0, 0.1); |
|
|
--loading-bg: rgba(255, 255, 255, 0.85); |
|
|
} |
|
|
|
|
|
[data-theme="dark"] { |
|
|
--primary-color: #9575cd; |
|
|
--primary-light: rgba(149, 117, 205, 0.2); |
|
|
--primary-dark: #7e57c2; |
|
|
--text-color: #f5f5f5; |
|
|
--bg-color: rgba(35, 35, 45, 0.7); |
|
|
--card-bg: rgba(45, 45, 55, 0.8); |
|
|
--shadow-color: rgba(0, 0, 0, 0.3); |
|
|
--border-color: rgba(255, 255, 255, 0.1); |
|
|
--loading-bg: rgba(35, 35, 45, 0.85); |
|
|
} |
|
|
|
|
|
* { |
|
|
margin: 0; |
|
|
padding: 0; |
|
|
box-sizing: border-box; |
|
|
} |
|
|
|
|
|
body { |
|
|
font-family: 'Nunito', sans-serif; |
|
|
color: var(--text-color); |
|
|
line-height: 1.6; |
|
|
background-color: #f5f5f5; |
|
|
background-image: url('https://api.suyanw.cn/api/comic3.php'); |
|
|
background-size: cover; |
|
|
background-position: center; |
|
|
background-repeat: no-repeat; |
|
|
background-attachment: fixed; |
|
|
min-height: 100vh; |
|
|
transition: all 0.3s ease; |
|
|
position: relative; |
|
|
overflow-x: hidden; |
|
|
} |
|
|
|
|
|
#main-container { |
|
|
max-width: 1000px; |
|
|
margin: 80px auto 120px; |
|
|
padding: 30px; |
|
|
background: var(--bg-color); |
|
|
border-radius: 15px; |
|
|
box-shadow: 0 10px 30px var(--shadow-color); |
|
|
backdrop-filter: blur(10px); |
|
|
-webkit-backdrop-filter: blur(10px); |
|
|
position: relative; |
|
|
z-index: 10; |
|
|
} |
|
|
|
|
|
#header { |
|
|
text-align: center; |
|
|
margin-bottom: 30px; |
|
|
} |
|
|
|
|
|
h1 { |
|
|
font-family: 'Kiwi Maru', serif; |
|
|
font-weight: 500; |
|
|
color: var(--primary-color); |
|
|
margin-bottom: 15px; |
|
|
font-size: 2.2rem; |
|
|
} |
|
|
|
|
|
p { |
|
|
color: var(--text-color); |
|
|
margin-bottom: 20px; |
|
|
} |
|
|
|
|
|
#platform-nav { |
|
|
display: flex; |
|
|
flex-wrap: wrap; |
|
|
justify-content: center; |
|
|
gap: 15px; |
|
|
margin-bottom: 30px; |
|
|
background: var(--card-bg); |
|
|
padding: 20px; |
|
|
border-radius: 12px; |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
backdrop-filter: blur(8px); |
|
|
-webkit-backdrop-filter: blur(8px); |
|
|
} |
|
|
|
|
|
.platform-btn { |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
align-items: center; |
|
|
padding: 10px; |
|
|
border-radius: 8px; |
|
|
transition: all 0.3s ease; |
|
|
cursor: pointer; |
|
|
background: transparent; |
|
|
border: 1px solid var(--border-color); |
|
|
min-width: 60px; |
|
|
} |
|
|
|
|
|
.platform-btn img { |
|
|
width: 30px; |
|
|
height: 30px; |
|
|
object-fit: contain; |
|
|
margin-bottom: 5px; |
|
|
} |
|
|
|
|
|
.platform-btn span { |
|
|
font-size: 12px; |
|
|
color: var(--text-color); |
|
|
} |
|
|
|
|
|
.platform-btn:hover { |
|
|
transform: translateY(-3px); |
|
|
box-shadow: 0 5px 10px var(--shadow-color); |
|
|
border-color: var(--primary-color); |
|
|
} |
|
|
|
|
|
#parser-container { |
|
|
background: var(--card-bg); |
|
|
padding: 25px; |
|
|
border-radius: 12px; |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
margin-bottom: 30px; |
|
|
backdrop-filter: blur(8px); |
|
|
-webkit-backdrop-filter: blur(8px); |
|
|
} |
|
|
|
|
|
#input-container { |
|
|
position: relative; |
|
|
margin-bottom: 20px; |
|
|
} |
|
|
|
|
|
#video-url { |
|
|
width: 100%; |
|
|
padding: 15px; |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 8px; |
|
|
font-family: 'Nunito', sans-serif; |
|
|
font-size: 16px; |
|
|
background: var(--bg-color); |
|
|
color: var(--text-color); |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
|
|
|
#video-url:focus { |
|
|
outline: none; |
|
|
border-color: var(--primary-color); |
|
|
box-shadow: 0 0 0 3px var(--primary-light); |
|
|
} |
|
|
|
|
|
#clipboard-btn { |
|
|
position: absolute; |
|
|
right: 10px; |
|
|
top: 50%; |
|
|
transform: translateY(-50%); |
|
|
background: transparent; |
|
|
border: none; |
|
|
color: var(--primary-color); |
|
|
cursor: pointer; |
|
|
font-size: 20px; |
|
|
} |
|
|
|
|
|
.btn { |
|
|
display: inline-block; |
|
|
padding: 12px 25px; |
|
|
background-color: var(--primary-color); |
|
|
color: white; |
|
|
border: none; |
|
|
border-radius: 8px; |
|
|
font-family: 'Nunito', sans-serif; |
|
|
font-size: 16px; |
|
|
font-weight: 600; |
|
|
cursor: pointer; |
|
|
transition: all 0.3s ease; |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
} |
|
|
|
|
|
.btn:hover { |
|
|
background-color: var(--primary-dark); |
|
|
transform: translateY(-2px); |
|
|
box-shadow: 0 7px 18px var(--shadow-color); |
|
|
} |
|
|
|
|
|
.btn:active { |
|
|
transform: translateY(0); |
|
|
box-shadow: 0 2px 8px var(--shadow-color); |
|
|
} |
|
|
|
|
|
#parse-btn { |
|
|
width: 100%; |
|
|
margin-top: 10px; |
|
|
margin-bottom: 20px; |
|
|
} |
|
|
|
|
|
#random-quote { |
|
|
text-align: center; |
|
|
font-style: italic; |
|
|
margin-bottom: 15px; |
|
|
color: var(--text-color); |
|
|
opacity: 0.8; |
|
|
} |
|
|
|
|
|
#result-container { |
|
|
display: none; |
|
|
margin-top: 30px; |
|
|
background: var(--card-bg); |
|
|
padding: 25px; |
|
|
border-radius: 12px; |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
backdrop-filter: blur(8px); |
|
|
-webkit-backdrop-filter: blur(8px); |
|
|
} |
|
|
|
|
|
#video-title { |
|
|
font-size: 18px; |
|
|
font-weight: 600; |
|
|
margin-bottom: 15px; |
|
|
color: var(--primary-color); |
|
|
} |
|
|
|
|
|
#video-player-container { |
|
|
margin: 20px 0; |
|
|
position: relative; |
|
|
width: 100%; |
|
|
padding-top: 56.25%; |
|
|
} |
|
|
|
|
|
#video-player { |
|
|
position: absolute; |
|
|
top: 0; |
|
|
left: 0; |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
border-radius: 8px; |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
} |
|
|
|
|
|
#image-gallery { |
|
|
display: grid; |
|
|
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); |
|
|
gap: 15px; |
|
|
margin: 20px 0; |
|
|
} |
|
|
|
|
|
.gallery-img { |
|
|
width: 100%; |
|
|
height: 150px; |
|
|
object-fit: cover; |
|
|
cursor: pointer; |
|
|
border-radius: 8px; |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
|
|
|
.gallery-img:hover { |
|
|
transform: scale(1.05); |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
} |
|
|
|
|
|
#download-btn { |
|
|
margin-top: 20px; |
|
|
} |
|
|
|
|
|
#loading { |
|
|
position: fixed; |
|
|
top: 0; |
|
|
left: 0; |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
background: var(--loading-bg); |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
justify-content: center; |
|
|
align-items: center; |
|
|
z-index: 1000; |
|
|
backdrop-filter: blur(5px); |
|
|
-webkit-backdrop-filter: blur(5px); |
|
|
display: none; |
|
|
} |
|
|
|
|
|
#loading-spinner { |
|
|
width: 60px; |
|
|
height: 60px; |
|
|
margin-bottom: 20px; |
|
|
border: 6px solid var(--primary-light); |
|
|
border-radius: 50%; |
|
|
border-top: 6px solid var(--primary-color); |
|
|
animation: spin 1s linear infinite; |
|
|
} |
|
|
|
|
|
#progress-container { |
|
|
width: 300px; |
|
|
background: var(--bg-color); |
|
|
height: 8px; |
|
|
border-radius: 4px; |
|
|
overflow: hidden; |
|
|
margin: 15px 0; |
|
|
} |
|
|
|
|
|
#progress-bar { |
|
|
width: 0; |
|
|
height: 100%; |
|
|
background: var(--primary-color); |
|
|
border-radius: 4px; |
|
|
transition: width 0.3s ease; |
|
|
} |
|
|
|
|
|
@keyframes spin { |
|
|
0% { transform: rotate(0deg); } |
|
|
100% { transform: rotate(360deg); } |
|
|
} |
|
|
|
|
|
.section-title { |
|
|
font-size: 20px; |
|
|
font-weight: 600; |
|
|
color: var(--primary-color); |
|
|
margin: 30px 0 15px; |
|
|
border-left: 4px solid var(--primary-color); |
|
|
padding-left: 10px; |
|
|
} |
|
|
|
|
|
#faq-section { |
|
|
background: var(--card-bg); |
|
|
padding: 25px; |
|
|
border-radius: 12px; |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
margin-top: 30px; |
|
|
backdrop-filter: blur(8px); |
|
|
-webkit-backdrop-filter: blur(8px); |
|
|
} |
|
|
|
|
|
.faq-item { |
|
|
margin-bottom: 20px; |
|
|
border-bottom: 1px solid var(--border-color); |
|
|
padding-bottom: 15px; |
|
|
} |
|
|
|
|
|
.faq-question { |
|
|
font-weight: 600; |
|
|
margin-bottom: 8px; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
color: var(--primary-color); |
|
|
} |
|
|
|
|
|
.faq-question i { |
|
|
margin-right: 8px; |
|
|
} |
|
|
|
|
|
.faq-answer { |
|
|
padding-left: 24px; |
|
|
} |
|
|
|
|
|
#history-section { |
|
|
background: var(--card-bg); |
|
|
padding: 25px; |
|
|
border-radius: 12px; |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
margin-top: 30px; |
|
|
backdrop-filter: blur(8px); |
|
|
-webkit-backdrop-filter: blur(8px); |
|
|
} |
|
|
|
|
|
#history-list { |
|
|
list-style: none; |
|
|
margin-top: 15px; |
|
|
} |
|
|
|
|
|
.history-item { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
padding: 10px; |
|
|
border-radius: 8px; |
|
|
margin-bottom: 10px; |
|
|
transition: all 0.3s ease; |
|
|
border: 1px solid var(--border-color); |
|
|
} |
|
|
|
|
|
.history-item:hover { |
|
|
background: var(--primary-light); |
|
|
} |
|
|
|
|
|
.history-thumb { |
|
|
width: 60px; |
|
|
height: 60px; |
|
|
object-fit: cover; |
|
|
border-radius: 4px; |
|
|
margin-right: 15px; |
|
|
} |
|
|
|
|
|
.history-info { |
|
|
flex-grow: 1; |
|
|
} |
|
|
|
|
|
.history-title { |
|
|
font-weight: 600; |
|
|
margin-bottom: 5px; |
|
|
color: var(--primary-color); |
|
|
display: -webkit-box; |
|
|
-webkit-line-clamp: 2; |
|
|
-webkit-box-orient: vertical; |
|
|
overflow: hidden; |
|
|
} |
|
|
|
|
|
.history-url { |
|
|
font-size: 12px; |
|
|
color: var(--text-color); |
|
|
opacity: 0.7; |
|
|
word-break: break-all; |
|
|
display: -webkit-box; |
|
|
-webkit-line-clamp: 1; |
|
|
-webkit-box-orient: vertical; |
|
|
overflow: hidden; |
|
|
} |
|
|
|
|
|
.history-actions { |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
gap: 5px; |
|
|
} |
|
|
|
|
|
.history-btn { |
|
|
font-size: 14px; |
|
|
padding: 5px 8px; |
|
|
background: var(--primary-color); |
|
|
color: white; |
|
|
border: none; |
|
|
border-radius: 4px; |
|
|
cursor: pointer; |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
|
|
|
.history-btn:hover { |
|
|
background: var(--primary-dark); |
|
|
} |
|
|
|
|
|
footer { |
|
|
text-align: center; |
|
|
padding: 15px; |
|
|
color: var(--text-color); |
|
|
background: var(--bg-color); |
|
|
backdrop-filter: blur(10px); |
|
|
-webkit-backdrop-filter: blur(10px); |
|
|
position: relative; |
|
|
margin-top: 30px; |
|
|
} |
|
|
|
|
|
footer a { |
|
|
color: var(--primary-color); |
|
|
text-decoration: none; |
|
|
} |
|
|
|
|
|
footer a:hover { |
|
|
text-decoration: underline; |
|
|
} |
|
|
|
|
|
|
|
|
#fish-canvas { |
|
|
position: absolute; |
|
|
bottom: 0; |
|
|
left: 0; |
|
|
width: 100%; |
|
|
height: 100px; |
|
|
z-index: -1; |
|
|
} |
|
|
|
|
|
|
|
|
#top-buttons { |
|
|
position: fixed; |
|
|
top: 15px; |
|
|
right: 15px; |
|
|
display: flex; |
|
|
gap: 10px; |
|
|
z-index: 100; |
|
|
} |
|
|
|
|
|
.top-btn { |
|
|
width: 40px; |
|
|
height: 40px; |
|
|
border-radius: 50%; |
|
|
background: var(--bg-color); |
|
|
display: flex; |
|
|
justify-content: center; |
|
|
align-items: center; |
|
|
font-size: 18px; |
|
|
color: var(--primary-color); |
|
|
cursor: pointer; |
|
|
border: none; |
|
|
box-shadow: 0 2px 10px var(--shadow-color); |
|
|
transition: all 0.3s ease; |
|
|
backdrop-filter: blur(10px); |
|
|
-webkit-backdrop-filter: blur(10px); |
|
|
} |
|
|
|
|
|
.top-btn:hover { |
|
|
transform: translateY(-3px); |
|
|
box-shadow: 0 5px 15px var(--shadow-color); |
|
|
} |
|
|
|
|
|
|
|
|
#feedback-modal { |
|
|
position: fixed; |
|
|
top: 0; |
|
|
left: 0; |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
background: rgba(0, 0, 0, 0.5); |
|
|
display: flex; |
|
|
justify-content: center; |
|
|
align-items: center; |
|
|
z-index: 1000; |
|
|
opacity: 0; |
|
|
visibility: hidden; |
|
|
transition: all 0.3s ease; |
|
|
backdrop-filter: blur(5px); |
|
|
-webkit-backdrop-filter: blur(5px); |
|
|
} |
|
|
|
|
|
#feedback-modal.active { |
|
|
opacity: 1; |
|
|
visibility: visible; |
|
|
} |
|
|
|
|
|
#feedback-content { |
|
|
width: 90%; |
|
|
max-width: 500px; |
|
|
background: var(--card-bg); |
|
|
border-radius: 12px; |
|
|
padding: 25px; |
|
|
box-shadow: 0 10px 30px var(--shadow-color); |
|
|
transform: translateY(-20px); |
|
|
transition: all 0.3s ease; |
|
|
backdrop-filter: blur(10px); |
|
|
-webkit-backdrop-filter: blur(10px); |
|
|
} |
|
|
|
|
|
#feedback-modal.active #feedback-content { |
|
|
transform: translateY(0); |
|
|
} |
|
|
|
|
|
#feedback-form textarea { |
|
|
width: 100%; |
|
|
height: 150px; |
|
|
padding: 15px; |
|
|
border: 1px solid var(--border-color); |
|
|
border-radius: 8px; |
|
|
margin: 15px 0; |
|
|
font-family: 'Nunito', sans-serif; |
|
|
font-size: 16px; |
|
|
background: var(--bg-color); |
|
|
color: var(--text-color); |
|
|
resize: none; |
|
|
} |
|
|
|
|
|
#feedback-form textarea:focus { |
|
|
outline: none; |
|
|
border-color: var(--primary-color); |
|
|
box-shadow: 0 0 0 3px var(--primary-light); |
|
|
} |
|
|
|
|
|
|
|
|
#image-modal { |
|
|
position: fixed; |
|
|
top: 0; |
|
|
left: 0; |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
background: rgba(0, 0, 0, 0.9); |
|
|
display: flex; |
|
|
justify-content: center; |
|
|
align-items: center; |
|
|
z-index: 1000; |
|
|
opacity: 0; |
|
|
visibility: hidden; |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
|
|
|
#image-modal.active { |
|
|
opacity: 1; |
|
|
visibility: visible; |
|
|
} |
|
|
|
|
|
#modal-image { |
|
|
max-width: 90%; |
|
|
max-height: 90%; |
|
|
object-fit: contain; |
|
|
} |
|
|
|
|
|
#close-modal { |
|
|
position: absolute; |
|
|
top: 20px; |
|
|
right: 20px; |
|
|
font-size: 30px; |
|
|
color: white; |
|
|
background: transparent; |
|
|
border: none; |
|
|
cursor: pointer; |
|
|
} |
|
|
|
|
|
|
|
|
@media (max-width: 768px) { |
|
|
#main-container { |
|
|
margin: 60px 15px 90px; |
|
|
padding: 20px; |
|
|
} |
|
|
|
|
|
h1 { |
|
|
font-size: 1.8rem; |
|
|
} |
|
|
|
|
|
.platform-btn { |
|
|
min-width: 50px; |
|
|
padding: 8px; |
|
|
} |
|
|
|
|
|
.platform-btn img { |
|
|
width: 24px; |
|
|
height: 24px; |
|
|
} |
|
|
|
|
|
#parser-container, #result-container, #faq-section, #history-section { |
|
|
padding: 15px; |
|
|
} |
|
|
|
|
|
#image-gallery { |
|
|
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); |
|
|
} |
|
|
|
|
|
.gallery-img { |
|
|
height: 120px; |
|
|
} |
|
|
|
|
|
#feedback-content { |
|
|
width: 95%; |
|
|
padding: 20px; |
|
|
} |
|
|
} |
|
|
|
|
|
@media (max-width: 480px) { |
|
|
#main-container { |
|
|
margin: 50px 10px 70px; |
|
|
padding: 15px; |
|
|
} |
|
|
|
|
|
h1 { |
|
|
font-size: 1.5rem; |
|
|
} |
|
|
|
|
|
#platform-nav { |
|
|
gap: 8px; |
|
|
padding: 10px; |
|
|
} |
|
|
|
|
|
.platform-btn { |
|
|
min-width: 40px; |
|
|
padding: 5px; |
|
|
} |
|
|
|
|
|
.platform-btn img { |
|
|
width: 20px; |
|
|
height: 20px; |
|
|
} |
|
|
|
|
|
.platform-btn span { |
|
|
font-size: 10px; |
|
|
} |
|
|
|
|
|
.btn { |
|
|
padding: 10px 20px; |
|
|
font-size: 14px; |
|
|
} |
|
|
|
|
|
#video-title { |
|
|
font-size: 16px; |
|
|
} |
|
|
|
|
|
#image-gallery { |
|
|
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); |
|
|
gap: 10px; |
|
|
} |
|
|
|
|
|
.gallery-img { |
|
|
height: 100px; |
|
|
} |
|
|
|
|
|
.history-thumb { |
|
|
width: 50px; |
|
|
height: 50px; |
|
|
} |
|
|
|
|
|
.history-btn { |
|
|
font-size: 12px; |
|
|
padding: 4px 6px; |
|
|
} |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body> |
|
|
<div id="top-buttons"> |
|
|
<button id="theme-btn" class="top-btn" title="切换明暗模式"> |
|
|
<i class="fas fa-moon"></i> |
|
|
</button> |
|
|
<button id="color-btn" class="top-btn" title="切换主题色"> |
|
|
<i class="fas fa-palette"></i> |
|
|
</button> |
|
|
<button id="feedback-btn" class="top-btn" title="意见反馈"> |
|
|
<i class="fas fa-comment"></i> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<div id="main-container"> |
|
|
<div id="header"> |
|
|
<h1>短视频无水印解析</h1> |
|
|
<p>支持抖音、快手、火山、小红书等多平台短视频解析下载,去除水印</p> |
|
|
</div> |
|
|
|
|
|
<div id="platform-nav"> |
|
|
<div class="platform-btn" data-platform="抖音"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377427291_dy.png" alt="抖音"> |
|
|
<span>抖音</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="快手"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377484677_OIP-C.png" alt="快手"> |
|
|
<span>快手</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="火山"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377480732_hssp.png" alt="火山"> |
|
|
<span>火山</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="西瓜"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377479737_xgsp-black.png" alt="西瓜"> |
|
|
<span>西瓜</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="皮皮虾"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377485180_ppx.png" alt="皮皮虾"> |
|
|
<span>皮皮虾</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="秒拍"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377885467_mp (1).png" alt="秒拍"> |
|
|
<span>秒拍</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="头条"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377883945_ttsp.png" alt="头条"> |
|
|
<span>头条</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="微视"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377891436_腾讯微视.png" alt="微视"> |
|
|
<span>微视</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="美图"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377886033_mtxx.png" alt="美图"> |
|
|
<span>美图</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="美拍"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377887635_mp.png" alt="美拍"> |
|
|
<span>美拍</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="微博"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377888691_wb.png" alt="微博"> |
|
|
<span>微博</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="小红书"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377889452_xhs.png" alt="小红书"> |
|
|
<span>小红书</span> |
|
|
</div> |
|
|
<div class="platform-btn" data-platform="网易云"> |
|
|
<img src="https://img.zlee.de/file/logo图片/1747377894287_wyy.png" alt="网易云"> |
|
|
<span>网易云</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div id="parser-container"> |
|
|
<div id="input-container"> |
|
|
<input type="text" id="video-url" placeholder="粘贴短视频分享链接..." autocomplete="off"> |
|
|
<button id="clipboard-btn" title="粘贴"><i class="fas fa-paste"></i></button> |
|
|
</div> |
|
|
<button id="parse-btn" class="btn"><i class="fas fa-magic"></i> 魔法解析</button> |
|
|
<div id="random-quote">加载中...</div> |
|
|
</div> |
|
|
|
|
|
<div id="result-container"> |
|
|
<div id="video-title"></div> |
|
|
<div id="video-player-container"> |
|
|
<video id="video-player" controls playsinline></video> |
|
|
</div> |
|
|
<div id="image-gallery"></div> |
|
|
<button id="download-btn" class="btn"><i class="fas fa-download"></i> 保存视频</button> |
|
|
</div> |
|
|
|
|
|
<div id="history-section"> |
|
|
<div class="section-title">解析历史</div> |
|
|
<ul id="history-list"> |
|
|
|
|
|
<li>暂无解析历史</li> |
|
|
</ul> |
|
|
</div> |
|
|
|
|
|
<div id="faq-section"> |
|
|
<div class="section-title">常见问题</div> |
|
|
|
|
|
<div class="faq-item"> |
|
|
<div class="faq-question"><i class="fas fa-question-circle"></i> 为什么安卓手机无法下载视频?</div> |
|
|
<div class="faq-answer">安卓手机需要长按视频后选择"保存视频"选项。如果没有此选项,请尝试使用系统浏览器或其他下载器。</div> |
|
|
</div> |
|
|
|
|
|
<div class="faq-item"> |
|
|
<div class="faq-question"><i class="fas fa-question-circle"></i> 苹果手机如何保存视频?</div> |
|
|
<div class="faq-answer">苹果设备可以长按视频,然后选择"添加到相册"或"保存视频"选项。或者点击下方的"保存视频"按钮后复制链接,在浏览器中打开并长按保存。</div> |
|
|
</div> |
|
|
|
|
|
<div class="faq-item"> |
|
|
<div class="faq-question"><i class="fas fa-question-circle"></i> 解析后的视频仍有水印怎么办?</div> |
|
|
<div class="faq-answer">部分平台会在视频中嵌入水印,这种情况下无法完全去除。本工具主要去除平台叠加的悬浮水印,提升视频观看体验。</div> |
|
|
</div> |
|
|
|
|
|
<div class="faq-item"> |
|
|
<div class="faq-question"><i class="fas fa-question-circle"></i> 解析失败怎么办?</div> |
|
|
<div class="faq-answer">请确保您复制的是完整的分享链接,包含http或https前缀。如果仍然失败,可能是该平台暂不支持或接口临时故障,您可以反馈给我们。</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<footer> |
|
|
<p>© 2023 短视频解析 | <a href="javascript:void(0)" id="footer-feedback">意见反馈</a></p> |
|
|
<canvas id="fish-canvas"></canvas> |
|
|
</footer> |
|
|
|
|
|
<div id="loading"> |
|
|
<div id="loading-spinner"></div> |
|
|
<p>解析中,请稍候...</p> |
|
|
<div id="progress-container"> |
|
|
<div id="progress-bar"></div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div id="feedback-modal"> |
|
|
<div id="feedback-content"> |
|
|
<h2 style="color: var(--primary-color);margin-bottom:15px;">意见反馈</h2> |
|
|
<p>如果您遇到问题或有建议,请在下方留言:</p> |
|
|
<form id="feedback-form"> |
|
|
<textarea id="feedback-text" placeholder="请描述您的问题或建议..."></textarea> |
|
|
<div style="display:flex;justify-content:flex-end;gap:10px;"> |
|
|
<button type="button" id="cancel-feedback" class="btn" style="background:gray;">取消</button> |
|
|
<button type="submit" id="send-feedback" class="btn">发送</button> |
|
|
</div> |
|
|
</form> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div id="image-modal"> |
|
|
<img id="modal-image" src="" alt="预览图"> |
|
|
<button id="close-modal"><i class="fas fa-times"></i></button> |
|
|
</div> |
|
|
|
|
|
<script> |
|
|
|
|
|
function initTheme() { |
|
|
const savedTheme = localStorage.getItem('theme') || 'light'; |
|
|
document.documentElement.setAttribute('data-theme', savedTheme); |
|
|
|
|
|
const themeBtn = document.getElementById('theme-btn'); |
|
|
if (savedTheme === 'dark') { |
|
|
themeBtn.innerHTML = '<i class="fas fa-sun"></i>'; |
|
|
} else { |
|
|
themeBtn.innerHTML = '<i class="fas fa-moon"></i>'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function initThemeColor() { |
|
|
const themeColors = [ |
|
|
{primary: '#7c4dff', light: 'rgba(124, 77, 255, 0.2)', dark: '#5e35b1'}, |
|
|
{primary: '#42a5f5', light: 'rgba(66, 165, 245, 0.2)', dark: '#1976d2'}, |
|
|
{primary: '#ec407a', light: 'rgba(236, 64, 122, 0.2)', dark: '#d81b60'}, |
|
|
{primary: '#66bb6a', light: 'rgba(102, 187, 106, 0.2)', dark: '#43a047'}, |
|
|
{primary: '#ff9800', light: 'rgba(255, 152, 0, 0.2)', dark: '#f57c00'}, |
|
|
]; |
|
|
|
|
|
const colorIndex = parseInt(localStorage.getItem('colorIndex') || '0'); |
|
|
const color = themeColors[colorIndex]; |
|
|
|
|
|
document.documentElement.style.setProperty('--primary-color', color.primary); |
|
|
document.documentElement.style.setProperty('--primary-light', color.light); |
|
|
document.documentElement.style.setProperty('--primary-dark', color.dark); |
|
|
|
|
|
document.getElementById('color-btn').onclick = function() { |
|
|
const nextIndex = (colorIndex + 1) % themeColors.length; |
|
|
localStorage.setItem('colorIndex', nextIndex); |
|
|
initThemeColor(); |
|
|
}; |
|
|
} |
|
|
|
|
|
|
|
|
function loadSakuraEffect() { |
|
|
const script = document.createElement('script'); |
|
|
script.src = 'https://api.suyanw.cn/api/mouse/yinghua.js'; |
|
|
document.body.appendChild(script); |
|
|
} |
|
|
|
|
|
|
|
|
function loadLive2D() { |
|
|
const live2d_script1 = document.createElement('script'); |
|
|
live2d_script1.src = 'https://cdn.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js'; |
|
|
document.body.appendChild(live2d_script1); |
|
|
} |
|
|
|
|
|
|
|
|
function initFishAnimation() { |
|
|
const canvas = document.getElementById('fish-canvas'); |
|
|
const ctx = canvas.getContext('2d'); |
|
|
canvas.width = canvas.offsetWidth; |
|
|
canvas.height = canvas.offsetHeight; |
|
|
|
|
|
const fishes = []; |
|
|
for (let i = 0; i < 8; i++) { |
|
|
fishes.push({ |
|
|
x: Math.random() * canvas.width, |
|
|
y: Math.random() * canvas.height, |
|
|
size: 5 + Math.random() * 10, |
|
|
speed: 0.5 + Math.random() * 1.5, |
|
|
angle: Math.random() * Math.PI * 2, |
|
|
color: getComputedStyle(document.documentElement).getPropertyValue('--primary-color') |
|
|
}); |
|
|
} |
|
|
|
|
|
function updateFishes() { |
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height); |
|
|
|
|
|
for (const fish of fishes) { |
|
|
|
|
|
fish.x += Math.cos(fish.angle) * fish.speed; |
|
|
fish.y += Math.sin(fish.angle) * fish.speed; |
|
|
|
|
|
|
|
|
if (fish.x < 0) fish.x = canvas.width; |
|
|
if (fish.x > canvas.width) fish.x = 0; |
|
|
if (fish.y < 0) fish.y = canvas.height; |
|
|
if (fish.y > canvas.height) fish.y = 0; |
|
|
|
|
|
|
|
|
if (Math.random() < 0.02) { |
|
|
fish.angle += (Math.random() - 0.5) * 0.5; |
|
|
} |
|
|
|
|
|
|
|
|
ctx.fillStyle = fish.color; |
|
|
ctx.beginPath(); |
|
|
ctx.moveTo(fish.x, fish.y); |
|
|
ctx.lineTo(fish.x - fish.size * 1.5, fish.y - fish.size / 2); |
|
|
ctx.lineTo(fish.x - fish.size * 1.5, fish.y + fish.size / 2); |
|
|
ctx.closePath(); |
|
|
ctx.fill(); |
|
|
|
|
|
|
|
|
ctx.beginPath(); |
|
|
ctx.moveTo(fish.x - fish.size * 1.2, fish.y); |
|
|
ctx.lineTo(fish.x - fish.size * 1.8, fish.y - fish.size * 0.8); |
|
|
ctx.lineTo(fish.x - fish.size * 1.8, fish.y + fish.size * 0.8); |
|
|
ctx.closePath(); |
|
|
ctx.fill(); |
|
|
} |
|
|
|
|
|
requestAnimationFrame(updateFishes); |
|
|
} |
|
|
|
|
|
updateFishes(); |
|
|
|
|
|
|
|
|
window.addEventListener('resize', () => { |
|
|
canvas.width = canvas.offsetWidth; |
|
|
canvas.height = canvas.offsetHeight; |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
async function fetchRandomQuote() { |
|
|
try { |
|
|
const response = await fetch('https://api.suyanw.cn/api/weimei.php'); |
|
|
if (!response.ok) throw new Error('网络错误'); |
|
|
const text = await response.text(); |
|
|
document.getElementById('random-quote').textContent = text || "每一个视频背后,都有一个想被分享的故事"; |
|
|
} catch (error) { |
|
|
document.getElementById('random-quote').textContent = "每一个视频背后,都有一个想被分享的故事"; |
|
|
console.error('获取随机文案失败:', error); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function loadHistory() { |
|
|
const historyList = document.getElementById('history-list'); |
|
|
const history = JSON.parse(localStorage.getItem('parseHistory') || '[]'); |
|
|
|
|
|
if (history.length === 0) { |
|
|
historyList.innerHTML = '<li>暂无解析历史</li>'; |
|
|
return; |
|
|
} |
|
|
|
|
|
historyList.innerHTML = ''; |
|
|
history.forEach((item, index) => { |
|
|
const li = document.createElement('li'); |
|
|
li.className = 'history-item'; |
|
|
li.innerHTML = ` |
|
|
<img class="history-thumb" src="${item.cover || 'https://via.placeholder.com/60'}" alt="缩略图"> |
|
|
<div class="history-info"> |
|
|
<div class="history-title">${item.title || '未知标题'}</div> |
|
|
<div class="history-url">${item.url}</div> |
|
|
</div> |
|
|
<div class="history-actions"> |
|
|
<button class="history-btn history-reparse" data-url="${item.url}"><i class="fas fa-redo"></i> 重新解析</button> |
|
|
<button class="history-btn history-delete" data-index="${index}"><i class="fas fa-trash"></i> 删除</button> |
|
|
</div> |
|
|
`; |
|
|
historyList.appendChild(li); |
|
|
}); |
|
|
|
|
|
|
|
|
document.querySelectorAll('.history-reparse').forEach(btn => { |
|
|
btn.addEventListener('click', function() { |
|
|
const url = this.getAttribute('data-url'); |
|
|
document.getElementById('video-url').value = url; |
|
|
document.getElementById('parse-btn').click(); |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
document.querySelectorAll('.history-delete').forEach(btn => { |
|
|
btn.addEventListener('click', function() { |
|
|
const index = parseInt(this.getAttribute('data-index')); |
|
|
const history = JSON.parse(localStorage.getItem('parseHistory') || '[]'); |
|
|
history.splice(index, 1); |
|
|
localStorage.setItem('parseHistory', JSON.stringify(history)); |
|
|
loadHistory(); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
function saveToHistory(data) { |
|
|
if (!data || !data.url) return; |
|
|
|
|
|
let history = JSON.parse(localStorage.getItem('parseHistory') || '[]'); |
|
|
|
|
|
|
|
|
const exists = history.findIndex(item => item.url === data.url); |
|
|
if (exists > -1) { |
|
|
history.splice(exists, 1); |
|
|
} |
|
|
|
|
|
|
|
|
history.unshift({ |
|
|
url: data.url, |
|
|
title: data.title || '', |
|
|
cover: data.cover || '', |
|
|
timestamp: new Date().getTime() |
|
|
}); |
|
|
|
|
|
|
|
|
if (history.length > 10) { |
|
|
history = history.slice(0, 10); |
|
|
} |
|
|
|
|
|
localStorage.setItem('parseHistory', JSON.stringify(history)); |
|
|
loadHistory(); |
|
|
} |
|
|
|
|
|
|
|
|
async function parseVideo(url) { |
|
|
if (!url) { |
|
|
alert('请输入有效的视频链接'); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
const loading = document.getElementById('loading'); |
|
|
const progressBar = document.getElementById('progress-bar'); |
|
|
loading.style.display = 'flex'; |
|
|
progressBar.style.width = '0%'; |
|
|
|
|
|
|
|
|
const apiList = [ |
|
|
`https://api.kxzjoker.cn/api/parse?url=${encodeURIComponent(url)}`, |
|
|
`https://api.kxzjoker.cn/api/parse2?url=${encodeURIComponent(url)}`, |
|
|
`https://api.kxzjoker.cn/api/parse3?url=${encodeURIComponent(url)}` |
|
|
]; |
|
|
|
|
|
let successData = null; |
|
|
let apiIndex = 0; |
|
|
|
|
|
while (apiIndex < apiList.length && !successData) { |
|
|
try { |
|
|
|
|
|
const progress = (apiIndex / apiList.length) * 90; |
|
|
progressBar.style.width = `${progress}%`; |
|
|
|
|
|
|
|
|
await new Promise(resolve => setTimeout(resolve, 800)); |
|
|
|
|
|
const response = await fetch(apiList[apiIndex]); |
|
|
const data = await response.json(); |
|
|
|
|
|
if (data && data.code === 200) { |
|
|
successData = data.data; |
|
|
break; |
|
|
} |
|
|
} catch (error) { |
|
|
console.error(`API ${apiIndex + 1} 解析失败:`, error); |
|
|
} |
|
|
|
|
|
apiIndex++; |
|
|
} |
|
|
|
|
|
|
|
|
progressBar.style.width = '100%'; |
|
|
await new Promise(resolve => setTimeout(resolve, 500)); |
|
|
|
|
|
|
|
|
loading.style.display = 'none'; |
|
|
|
|
|
if (successData) { |
|
|
displayResult(successData, url); |
|
|
saveToHistory({ |
|
|
url: url, |
|
|
title: successData.title || '', |
|
|
cover: successData.cover || successData.thumbnail || '' |
|
|
}); |
|
|
} else { |
|
|
alert('解析失败,请检查链接是否正确或尝试其他平台的视频'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function displayResult(data, originalUrl) { |
|
|
const resultContainer = document.getElementById('result-container'); |
|
|
const videoTitle = document.getElementById('video-title'); |
|
|
const videoPlayer = document.getElementById('video-player'); |
|
|
const imageGallery = document.getElementById('image-gallery'); |
|
|
const downloadBtn = document.getElementById('download-btn'); |
|
|
|
|
|
|
|
|
videoTitle.textContent = ''; |
|
|
videoPlayer.src = ''; |
|
|
imageGallery.innerHTML = ''; |
|
|
|
|
|
|
|
|
videoTitle.textContent = data.title || '视频标题'; |
|
|
|
|
|
|
|
|
resultContainer.style.display = 'block'; |
|
|
setTimeout(() => { |
|
|
resultContainer.scrollIntoView({ behavior: 'smooth' }); |
|
|
}, 300); |
|
|
|
|
|
|
|
|
if (data.images && data.images.length > 0) { |
|
|
|
|
|
videoPlayer.style.display = 'none'; |
|
|
imageGallery.style.display = 'grid'; |
|
|
downloadBtn.style.display = 'none'; |
|
|
|
|
|
data.images.forEach(imgUrl => { |
|
|
const imgContainer = document.createElement('div'); |
|
|
imgContainer.className = 'gallery-img-wrapper'; |
|
|
|
|
|
const img = document.createElement('img'); |
|
|
img.className = 'gallery-img'; |
|
|
img.src = imgUrl; |
|
|
img.alt = '图集'; |
|
|
img.onclick = function() { |
|
|
document.getElementById('modal-image').src = imgUrl; |
|
|
document.getElementById('image-modal').classList.add('active'); |
|
|
}; |
|
|
|
|
|
imgContainer.appendChild(img); |
|
|
imageGallery.appendChild(imgContainer); |
|
|
}); |
|
|
} else { |
|
|
|
|
|
videoPlayer.style.display = 'block'; |
|
|
imageGallery.style.display = 'none'; |
|
|
downloadBtn.style.display = 'block'; |
|
|
|
|
|
videoPlayer.src = data.url || ''; |
|
|
videoPlayer.poster = data.cover || data.thumbnail || ''; |
|
|
|
|
|
downloadBtn.onclick = function() { |
|
|
const videoUrl = data.url; |
|
|
if (!videoUrl) { |
|
|
alert('获取下载链接失败'); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
navigator.clipboard.writeText(videoUrl).then(() => { |
|
|
console.log('视频链接已复制到粘贴板'); |
|
|
}).catch(err => { |
|
|
console.error('复制失败:', err); |
|
|
}); |
|
|
|
|
|
|
|
|
try { |
|
|
const a = document.createElement('a'); |
|
|
a.href = videoUrl; |
|
|
a.download = `${data.title || 'video'}.mp4`; |
|
|
a.target = '_blank'; |
|
|
a.click(); |
|
|
alert('电脑端请右键视频选择"另存为"。手机端请长按视频选择"保存视频"。视频链接已复制到剪贴板,您也可以在浏览器中打开链接下载。'); |
|
|
} catch (error) { |
|
|
alert('请在视频上长按选择保存视频,或使用视频下载器下载'); |
|
|
console.error('下载失败:', error); |
|
|
} |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function monitorClipboard() { |
|
|
const videoUrlInput = document.getElementById('video-url'); |
|
|
const pasteButton = document.getElementById('clipboard-btn'); |
|
|
|
|
|
pasteButton.addEventListener('click', async function() { |
|
|
try { |
|
|
const text = await navigator.clipboard.readText(); |
|
|
if (text && (text.includes('http://') || text.includes('https://'))) { |
|
|
videoUrlInput.value = text; |
|
|
} |
|
|
} catch (error) { |
|
|
console.error('无法访问剪贴板:', error); |
|
|
alert('请手动粘贴链接到输入框'); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
videoUrlInput.addEventListener('focus', async function() { |
|
|
if (this.value === '') { |
|
|
try { |
|
|
const text = await navigator.clipboard.readText(); |
|
|
if (text && (text.includes('http://') || text.includes('https://'))) { |
|
|
this.value = text; |
|
|
} |
|
|
} catch (error) { |
|
|
console.error('无法自动读取剪贴板,用户可能未授权或浏览器不支持'); |
|
|
} |
|
|
} |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
|
|
initTheme(); |
|
|
initThemeColor(); |
|
|
|
|
|
|
|
|
loadSakuraEffect(); |
|
|
loadLive2D(); |
|
|
initFishAnimation(); |
|
|
|
|
|
|
|
|
fetchRandomQuote(); |
|
|
loadHistory(); |
|
|
|
|
|
|
|
|
monitorClipboard(); |
|
|
|
|
|
|
|
|
document.getElementById('theme-btn').addEventListener('click', function() { |
|
|
const currentTheme = document.documentElement.getAttribute('data-theme'); |
|
|
const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; |
|
|
document.documentElement.setAttribute('data-theme', newTheme); |
|
|
localStorage.setItem('theme', newTheme); |
|
|
|
|
|
|
|
|
this.innerHTML = newTheme === 'dark' ? |
|
|
'<i class="fas fa-sun"></i>' : |
|
|
'<i class="fas fa-moon"></i>'; |
|
|
}); |
|
|
|
|
|
document.getElementById('parse-btn').addEventListener('click', function() { |
|
|
const url = document.getElementById('video-url').value.trim(); |
|
|
parseVideo(url); |
|
|
}); |
|
|
|
|
|
document.getElementById('feedback-btn').addEventListener('click', function() { |
|
|
document.getElementById('feedback-modal').classList.add('active'); |
|
|
}); |
|
|
|
|
|
document.getElementById('footer-feedback').addEventListener('click', function() { |
|
|
document.getElementById('feedback-modal').classList.add('active'); |
|
|
}); |
|
|
|
|
|
document.getElementById('cancel-feedback').addEventListener('click', function() { |
|
|
document.getElementById('feedback-modal').classList.remove('active'); |
|
|
}); |
|
|
|
|
|
document.getElementById('feedback-form').addEventListener('submit', function(e) { |
|
|
e.preventDefault(); |
|
|
const feedback = document.getElementById('feedback-text').value.trim(); |
|
|
if (!feedback) { |
|
|
alert('请输入反馈内容'); |
|
|
return; |
|
|
} |
|
|
console.log('用户反馈:', feedback); |
|
|
alert('感谢您的反馈!我们会尽快处理。'); |
|
|
document.getElementById('feedback-text').value = ''; |
|
|
document.getElementById('feedback-modal').classList.remove('active'); |
|
|
}); |
|
|
|
|
|
document.getElementById('close-modal').addEventListener('click', function() { |
|
|
document.getElementById('image-modal').classList.remove('active'); |
|
|
}); |
|
|
|
|
|
|
|
|
document.querySelectorAll('.platform-btn').forEach(btn => { |
|
|
btn.addEventListener('click', function() { |
|
|
const platform = this.getAttribute('data-platform'); |
|
|
|
|
|
|
|
|
let videoUrl = document.getElementById('video-url'); |
|
|
if (!videoUrl.value) { |
|
|
videoUrl.placeholder = `请粘贴${platform}分享链接...`; |
|
|
} |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
</script> |
|
|
|
|
|
</body> |
|
|
</html> |