试贴
本帖最后由 杨帆 于 2025-3-17 07:02 编辑 <br /><br /><style>@import url(https://file.uhsea.com/2403/f45f79bba93cd62f8603eae6fa88eb78YS.css);
:root{--rState:running;--w:1400px;--h:800px;--fw:1400px;--fh:800px}
#fullscreen { position: absolute; top:5%; left:3%;color:#ffffff; filter:drop-shadow( 1px 1px 1px #000000);font: normal 2.2em华文新魏; opacity: 0.8; cursor: pointer; z-index: 5}
.lrcShow{font:bold 2.4em 楷体,楷体_GD2312,sans-serif;pointer-events:none;left:20%;bottom:0px;filter:drop-shadow(1px 0px 0px white)drop-shadow(0px 1px 0px white)drop-shadow(-1px 0px 0px white)drop-shadow(0px -1px 0px white);z-index:4;}
.lrcShow::before{color:hsl(0,80%,80%);}
#outBlk{position:relative;width:var(--w);height:var(--h);background:#000000 url(https://pic.imgdb.cn/item/65bf0270871b83018a3ad9aa.jpg)no-repeat center / cover;overflow:hidden;margin: 130px 0 30px calc(50% - 780px);box-shadow:4px 4px 10px #000;}
zxx-slide{width:var(--fw);height:var(--fh);position:absolute;z-index:1;}
.zxx-slide-a{position:absolute;cursor:default;pointer-events:none;}
.zxx-slide-a.in{z-index:2;animation-duration:2s;animation-name:brightnessIn;transition:1s;}
.zxx-slide-img{width:var(--fw);height:var(--fh);}
@keyframes brightnessIn{0%{transform:scale(0.1);opacity:0;}10%{transform:scale(0.5);opacity:1;}100%{transform:scale(1)}}
#processMeter{position:absolute;right:20px;bottom:10px;width:200px;height:100px;cursor:pointer;z-index:33;}
#rPlayer{transform-origin:50%;animation:rot 5s linear infinite var(--rState);}
@keyframes rot{to{transform: rotate(1turn)}}
</style>
<div id="outBlk">
<span id="fullscreen">全屏观赏</span>
<zxx-slide></zxx-slide>
<svg stroke-width="5" viewBox="0 0 200 100" id="processMeter">
<!-- 背景圆形 -->
<path id='bgc' d="M 100 5 A 95 45 0 0 1 100 95 A 95 45 0 0 1 100 5" stroke="#ebeef5"fill="none" ></path>
<!-- 进度条 -->
<path
class="process-circle"
d="M 100 5 A 95 45 0 0 1 100 95 A 95 45 0 0 1 100 5"
stroke="darkred"
fill="none"
stroke-dasharray="455"
stroke-dashoffset="455"
></path>
<defs>
<clipPath id="clip">
<circle cx="100" cy="50" r="41" />
</clilpPath>
</defs>
<image xlink:href="https://pic.imgdb.cn/item/65b75c8f871b83018a83e1c1.png" width="100" height='100' x="50" y="0" id="rPlayer" clip-path="url(#clip)" preserveAspectRatio="none" />
<text x="85%" y="50%" stroke="lightgray" text-anchor="middle" dominant-baseline="middle" stroke-width="2" style="font-size:13px;" id="durTime"> </text>
<text x="15%" y="50%" stroke="lightgray" text-anchor="middle" dominant-baseline="middle" stroke-width="2" style="font-size:13px;" id="curTime"> </text>
</svg>
<div class="lrcShow" data-lrc="碧水蓝天" >碧水蓝天</div>
</div>
<script>
const processCircle = document.querySelector('.process-circle');
// 获取圆的周长
const circumference = processCircle.getTotalLength();
// 把周长赋值给 strokeDasharray
processCircle.style.strokeDasharray = circumference;
function setProcessCircle(percent = 0) {
// 动态计算 offset 赋值给 strokeDashoffset
// 为了支持 percent = 0 | '0%',所以使用 parseInt 转换
processCircle.style.strokeDashoffset =
circumference * (1 - parseInt(percent) / 100)
}
var sf0 = document.createElement('script');
sf0.type = 'text/javascript';
sf0.src = "https://file.uhsea.com/2410/739c572b5176f670f350463cf9ade957QB.js";
sf0.charset = "utf-8";
document.body.appendChild(sf0);
sf0.onload = () => {
let circlePoints = [];
let bgcLen = bgc.getTotalLength();
for(let i = 0; i < bgcLen; i++) {
circlePoints.push(bgc.getPointAtLength(i));
}
console.log(circlePoints);
let lrctxt = `
`;
let opts = {
lrcTxt:lrctxt,
audioURL:"https://www.joy127.com/url/109961.mp3",
}
let player = new lrcPlayerY(opts);
//console.log(player.lrcVec);
let pics = [
"https://pic.imgdb.cn/item/674d81d5d0e0a243d4dbf77e.gif",
"https://pic.imgdb.cn/item/674d81f8d0e0a243d4dbf7e1.gif",
"https://pic.imgdb.cn/item/674d8215d0e0a243d4dbf830.gif",
"https://pic.imgdb.cn/item/674d822ed0e0a243d4dbf862.gif",
"https://pic.imgdb.cn/item/674d8244d0e0a243d4dbf891.gif",
"https://pic.imgdb.cn/item/674d8258d0e0a243d4dbf8b5.gif",
"https://pic.imgdb.cn/item/674d826dd0e0a243d4dbf8d4.gif",
"https://pic.imgdb.cn/item/674d8282d0e0a243d4dbf8f2.gif",
"https://pic.imgdb.cn/item/674d8295d0e0a243d4dbf916.gif",
"https://pic.imgdb.cn/item/674d82a8d0e0a243d4dbf930.gif",
];
let eleZxxSlides = document.querySelectorAll('zxx-slide');
pics.forEach(pic => {
let aObj = document.createElement('a');
aObj.className = 'zxx-slide-a';
let imgObj = document.createElement('img');
imgObj.src = pic;
imgObj.className = 'zxx-slide-img';
aObj.appendChild(imgObj);
eleZxxSlides.appendChild(aObj);
});
[].slice.call(eleZxxSlides).forEach(function(container) {
let timerSlide = null;
let indexSlide = 0;
// 对应的元素
let eleSlides = [].slice.call(container.querySelectorAll('a'));
let eleButtons = [].slice.call(container.querySelectorAll('button'));
let funSlide = function() {
eleSlides.forEach(function(slide, index) {
if (!player.mObj.paused) {
if (indexSlide == index) {
slide.classList.add('in');
} else if (slide.classList.contains('in')) {
slide.classList.remove('in');
}
}
});
timerSlide = setTimeout(function() {
indexSlide++;
if (indexSlide == eleSlides.length) {
indexSlide = 0;
}
funSlide();
}, 8000);
}
indexSlide++;
setTimeout(funSlide, 8000);
});
let formatTime = (time) => {
let str = '';
let min = parseInt(time / 60);
let sec = parseInt(time % 60);
return ((min < 10 ? '0'+min:min) + ":" + (sec < 10 ? '0'+sec:sec));
};
player.mObj.addEventListener('timeupdate', function() {
let processValue = player.mObj.currentTime / player.mObj.duration;
processCircle.style.strokeDashoffset = circumference * (1 - processValue);
durTime.textContent = formatTime(player.mObj.duration);
curTime.textContent = formatTime(player.mObj.currentTime);
});
rPlayer.onclick = () => {
player.mObj.paused ? (outBlk.style.setProperty('--rState','running'), player.mObj.play()) : (outBlk.style.setProperty('--rState','paused'), player.mObj.pause());
}
let seeking = false;
let moveEventProc = (event) => {
if(!seeking) return;
let thePoint = 0, minV = 100;
circlePoints.forEach((point, idx ) => {
let mx = (point.x - event.offsetX), my = (point.y - event.offsetY)
let mv = mx*mx + my*my;
if(mv < minV) {
minV = mv; thePoint = idx;
}
})
let chkVal = thePoint / circumference;
let chkTime = player.mObj.duration * chkVal;
processCircle.style.strokeDashoffset = circumference * (1 - chkVal);
for(i = 0; i < player.lrcVec.length; i++) {
if(player.lrcVec.seconds >= chkTime) {
//console.log(player.lrcVec.seconds, i);
player.idx = i;
player.mObj.currentTime = chkTime;
break;
}
};
};
processCircle.addEventListener("mousemove", (event) => moveEventProc(event));
bgc.addEventListener("mousemove", (event) => moveEventProc(event));
processCircle.onclick = bgc.onclick = () => seeking = !seeking;
}
let fs = true;
fullscreen.onclick = () => {
fs ? (fullscreen.innerText = '退出全屏',outBlk.requestFullscreen()) : (fullscreen.innerText = '全屏欣赏', document.exitFullscreen());
if(fs) {outBlk.style.setProperty('--fw',window.screen.width + 'px');outBlk.style.setProperty('--fh',window.screen.height + 'px');}
fs = !fs;
};
</script>
<SCRIPT language="javascript">
function click() {
if (event.button==2)
{
//
alert('谢谢欣赏')
}
}
document.onmousedown=click
</SCRIPT> 本帖最后由 杨帆 于 2025-4-29 13:15 编辑 <br /><br /><div id="bb" style="position: relative;width: 100%;background-color: rgba(0, 0, 255, 0.1);height: 0;padding-top: 56.25%;overflow: hidden;box-shadow: 3px 3px 5px #000;background:url('https://pic.imgdb.cn/item/6741d960d29ded1a8c1bd6f3.jpg') no-repeatcenter/100% auto; pointer-events: none;cursor:none;z-index: 3; ">
<video id="sp" style="position: absolute;width:100%;height:auto;left:0;top:0;opacity:.5; z-index:1; " src="https://video-qn.51miz.com/preview/video/00/00/64/97/V-649701-EB71C04C.mp4"></video>
</div>
<center>
<audio id="myAudio" src="https://cccimg.com/view.php/bcd4188f3bf8cf6182f87bb74f9c9157.mp3"autoplay loop muted></audio>
</center>
<!-- 添加图片按钮 -->
<div id="controlButton" style="position: relative;left:1%;margin-top: -55%;cursor: pointer;z-index: 3;">
<img id="rotateImage" src="https://pic.imgdb.cn/item/65673f07c458853aef1e25ba.png" alt="Control Button" style="width:3%; height: 3%;">
</div>
<script type="text/javascript">
const video = document.getElementById('sp');
const audio = document.getElementById('myAudio');
const rotateImage = document.getElementById('rotateImage');
const controlButton = document.getElementById('controlButton');
audio.currentTime = '0';
audio.autoplay = 'true';
video.muted = 'true';
video.currentTime = '1.5';
video.autoplay = 'true';
let isPlaying = true;
let rotationAngle = 0;
// 控制播放和暂停的函数
function togglePlay() {
if (isPlaying) {
video.pause();
audio.pause();
} else {
video.play();
audio.play();
}
isPlaying = !isPlaying;
}
// 图片按钮点击事件
controlButton.addEventListener('click', togglePlay);
// 图片旋转函数
function rotateImageFunction() {
if (isPlaying) {
rotationAngle += .5; // 每次旋转2度
if (rotationAngle >= 360) {
rotationAngle = 0;
}
rotateImage.style.transform = `rotate(${rotationAngle}deg)`;
}
requestAnimationFrame(rotateImageFunction);
}
// 开始旋转
rotateImageFunction();
var vList = ['https://video-qn.51miz.com/preview/video/00/00/64/97/V-649701-EB71C04C.mp4', 'https://video-qn.51miz.com/preview/video/00/00/13/79/V-137992-59E8E7DE.mp4', 'https://video-qn.51miz.com/preview/video/00/00/16/61/V-166191-5D524C02.mp4'];
var vLen = vList.length;
var curr = 0;
function play() {
if (curr === vLen - 1) { // 如果是最后一个视频
video.addEventListener('loadedmetadata', () => {
video.currentTime = 1.5;
});
}
video.src = vList;
video.load();
video.play();
}
video.addEventListener('ended', function () {
curr = (curr + 1) % vLen; // 移动到下一个视频,循环播放
play();
});
play();
// 监听音频播放状态变化
audio.addEventListener('play', function () {
video.play();
isPlaying = true;
});
audio.addEventListener('pause', function () {
video.pause();
isPlaying = false;
});
audio.addEventListener('ended', () => {
audio.currentTime = '0';
audio.play();
video.src = vList;
video.load();
video.play();
video.addEventListener('ended', function () {
curr = (curr + 1) % vLen;
play();
});
});
document.addEventListener('visibilitychange', function () {
if (document.hidden) {
document.getElementsByTagName('audio').pause();
} else {
document.getElementsByTagName('audio').play();
}
});
</script>
<DIV> </DIV><DIV> </DIV> 本帖最后由 杨帆 于 2025-3-19 09:26 编辑 <br /><br /><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>青藏高原</title>
</head>
<body>
<p align="center"><iframe width="100%" height="460px" frameborder="0" scrolling="no" allowfullscreen="true" allowtransparency="true" src="https://file.uhsea.com/2503/94bdd23b8213c0490882cbdc3eb3ef6aL3.html?url=20250212&tx=https://cccimg.com/view.php/530ed7ab224305e8ec00cf5b41a27638.jpg&yy=https://pic.imgdb.cn/item/65d6e2059f345e8d032e3cef.gif&bj=https://cccimg.com/view.php/972263a869fe640fd1768aa30f5bb980.jpg&sx=https://video.699pic.com/videos/70/98/45/b_ktih9Na2nBxq1540709845_10s.mp4&fit=cover" /></iframe></p>
<script type="text/javascript">
var lxtxt =[">lmth/<",
'>vid/<>naps/<原高藏青 >"魏新文华 me0.9 dlob:tnof;%081:thgieh-enil;)gpj.4e4f00a6be8e00103b5b15a722d21251-81205202/26/cip/daolpu/pu/cc.vznc.sbb//:sptth(lru:egami-dnuorgkcab;)0,0,552(bgr xp1 :ekorts-txet-tikbew-;tnerapsnart:roloc-llif-txet-tikbew-;txet:pilc-dnuorgkcab-tikbew-"=elyts naps<',
'>";evitaler : noitisop ;%081:thgieh-enil ;retnec:ngila-txet ;xp052: pot-gniddap ;enon :stneve-retniop;1:xedni-z;xp08 xp591- xp055-: nigram ;xp053:thgieh;%051:htdiw"=elyts vid<'];
var linelen = lxtxt.length;
var txtStr = '';
for(n = linelen - 1; n >=0; n--) {
var linetxt = lxtxt;
for(j = linetxt.length - 1; j>=0;j--) {
txtStr += linetxt.charAt(j);
}
}
document.write(txtStr);
</script>
</body>
</html> 本帖最后由 杨帆 于 2025-3-17 03:53 编辑 <br /><br /><style>
#papa { margin: 100px 0 20px calc(50% - 721px); background:url('https://pic.imgdb.cn/item/65ae633e871b83018aa04268.jpg') no-repeat center/cover;width: 1280px; height: 720px; box-shadow: 3px 3px 6px gray; overflow: hidden; z-index:2; position: relative; display: grid; place-items: center; --state: running; --showbackface: visible;border-radius:32px;}
#mboard { width: 420px; height: 40px; background:Snow; border-radius: 8px; box-shadow: 2px 2px 4px rgba(0,0,0,.5); display: flex; justify-content: center; align-items: center; gap: 8px; position: relative; opacity: 0;}
#papa:hover #mboard{ transition: .7s; opacity: .9; }
#mboard img { width: 26px; cursor: pointer; }
#mboard img:hover { filter: drop-shadow(1px 1px 1px rgba(0,0,0,.5)); }
#tMsg1, #tMsg2 { width: 45px; font-size: 13px; text-align: center; }
#volwrap { position: absolute; width: 60px; height: 40px; right: 45px; display: grid; place-items: center; background: none; }
#volwrap:hover #volume { display: inline; }
#btnMute:hover ~ #volwrap > #volume { display: inline; }
#volume { position: absolute; width: 50px; height: 4px; opacity: .75; display: none; }
#prog { --track: gray; --prog: red; --prg: 0%; width: 200px; height: 20px; cursor: pointer; background: linear-gradient(to right, var(--prog) var(--prg), var(--track) 0) no-repeat 0% 50%/100% 2px; }
#dt{
position:absolute;mix-blend-mode: screen;
width: 100%;
height: 100%;
top:0%;
left: 0%; z-index: 2; }
#dt img{width: 100%;
height: 100%;
}
#vid {width: 100%; height: 120%;
position:absolute; z-index: 1;
top:-20%; left:0%;
object-fit: cover;
}
#bfq{height: 40px;position: relative;left: 0%; top: 45%;overflow: hidden; z-index: 10;}
</style>
<div id="papa">
<div id="dt">
<img src="https://pic1.imgdb.cn/item/67aefe6cd0e0a243d4ff228d.png" id="IMG" />
</div>
<div id="bfq">
<div id="mboard">
<img id="btnPlay" src="https://638183.freep.cn/638183/web/icon/play.svg" title="播放/暂停(Alt+X)" alt="" />
<span id="tMsg1">00:00</span>
<span id="prog"></span>
<span id="tMsg2">00:00</span>
<img id="btnMute" src="https://638183.freep.cn/638183/web/icon/unmuted.svg" title="静音 (Alt+J)" alt="" />
<div id="volwrap"><input id="volume" type="range" min="0" max="1" step="0.1" value="1" /></div>
</div>
</div>
<video id="vid" src="https://imgpp.ztupic.com/u/6X8Xv0HBB2/1617066870065_8faf5263.mp4" autoplay loop muted></video>
</div>
<p><audio id="aud" src="https://cccimg.com/view.php/682b0c454d4168fc1fa352380ed1a2af.mp3"loop></audio></p>
<script>
var lastVolume = 1, muted = false;
var imgAr = [
'https://638183.freep.cn/638183/web/icon/play.svg',
'https://638183.freep.cn/638183/web/icon/pause.svg',
'https://638183.freep.cn/638183/web/icon/unmuted.svg',
'https://638183.freep.cn/638183/web/icon/muted.svg',
];
var setVolume = (val) => Math.min(1, Math.max(0, val));
var setMute = () => {
if(lastVolume === 0) return;
muted = !muted;
muted ? (aud.volume = 0, btnMute.src = imgAr) : (aud.volume = lastVolume, btnMute.src = imgAr);
};
var s2m = (seconds) => {
const secs = Math.floor(seconds || 0);
return `${String(secs/60|0).padStart(2,'0')}:${String(secs%60).padStart(2,'0')}`;
};
var mState = () => {
btnPlay.src = aud.paused ? imgAr : imgAr;
btnPlay.title = (aud.paused ? '播放' : '暂停') + ' (Alt+X)';
};
document.addEventListener('keydown', e => {
if(!e.altKey) return;
switch (e.keyCode) {
case 88:
btnPlay.click();
break;
case 74:
setMute();
break;
case 187: case 107:
aud.volume = setVolume(aud.volume + 0.1);
lastVolume = aud.volume;
break;
case 189: case 109:
aud.volume = setVolume(aud.volume - 0.1);
lastVolume = aud.volume;
break;
default:
return;
}
});
aud.onplaying = aud.onpause = () => mState();
aud.ontimeupdate = () => {
prog.style.setProperty('--prg', aud.currentTime/aud.duration*100 +'%');
tMsg1.innerText = s2m(aud.currentTime);
tMsg2.innerText = s2m(aud.duration);
};
aud.onvolumechange = () => {
btnMute.src = aud.volume === 0 ? imgAr : imgAr;
volume.value = aud.volume;
}
btnPlay.onclick = () => aud.paused ? (aud.play(),image.play(),vid.play()): (aud.pause(),image.stop(),vid.pause());
btnMute.onclick = () => setMute();
volume.onchange = () => aud.volume = lastVolume = volume.value;
prog.onclick = (e) => aud.currentTime = e.offsetX * aud.duration / prog.offsetWidth;
prog.onmousemove = (e) => prog.title = s2m(e.offsetX * aud.duration / prog.offsetWidth);
volwrap.onmouseover = () => volwrap.title = '音量 : ' + volume.value + ' (Alt++/-)'
</script>
<script>
if ('getContext' in document.createElement('canvas')) {
HTMLImageElement.prototype.play = function() {
if (this.storeCanvas) {
// 洢canvas
this.storeCanvas.parentElement.removeChild(this.storeCanvas);
this.storeCanvas = null;
//
image.style.opacity = '';
}
if (this.storeUrl) {
this.src = this.storeUrl;
}
};
HTMLImageElement.prototype.stop = function() {
var canvas = document.createElement('canvas');
//
var width = this.width, height = this.height;
if (width && height) {
// 洢
if (!this.storeUrl) {
this.storeUrl = this.src;
}
// canvasС
canvas.width = width;
canvas.height = height;
//
canvas.getContext('2d').drawImage(this, 0, 0, width, height);
//
try {
this.src = canvas.toDataURL("image/gif");
} catch(e) {
//
this.removeAttribute('src');
// canvas
canvas.style.position = 'absolute';
//
this.parentElement.insertBefore(canvas, this);
//
this.style.opacity = '0';
// 洢canvas
this.storeCanvas = canvas;
}
}
};
}
var image= document.getElementById("IMG");
</script>
<script type="text/javascript">
var lxtxt =[">lmth/<",
'>vid/<>naps/<天春抱拥们我让 >"魏新文华 me0.8 dlob:tnof;%081:thgieh-enil;)gpj.4e4f00a6be8e00103b5b15a722d21251-81205202/26/cip/daolpu/pu/cc.vznc.sbb//:sptth(lru:egami-dnuorgkcab;)0,0,552(bgr xp1 :ekorts-txet-tikbew-;tnerapsnart:roloc-llif-txet-tikbew-;txet:pilc-dnuorgkcab-tikbew-"=elyts naps<',
'>";evitaler : noitisop ;%081:thgieh-enil ;retnec:ngila-txet ;xp05: pot-gniddap ;enon :stneve-retniop;2:xedni-z;xp003 xp062-xp006-: nigram ;xp053:thgieh;%051:htdiw"=elyts vid<'];
var linelen = lxtxt.length;
var txtStr = '';
for(n = linelen - 1; n >=0; n--) {
var linetxt = lxtxt;
for(j = linetxt.length - 1; j>=0;j--) {
txtStr += linetxt.charAt(j);
}
}
document.write(txtStr);
</script>
本帖最后由 杨帆 于 2025-4-29 14:54 编辑 <br /><br /> <div style="WIDTH: 1280px;height:740px; POSITION: relative;margin: 130px 0 0-340px;opacity: 1;">
<video id="vid" autoplay="autoplay" controlslist="nodownload" loop="loop" style="position: relative;width:100%;height:100%;object-fit: cover;overflow: hidden;" src="https://cccimg.com/view.php/7acc47fb8adc33690d01b0f8b63b24af.mp4"></video>
<div id="layer" style="position:absolute; left:-1%;width:50%;TOP: 45%; height:1.5em;z-index: 1;">
<textarea style="visibility:hidden;" id="lrcContent">
回家 - 科尔沁夫
词:于晓峰/尹宏峰
曲:科尔沁夫
那里的风还在吹
风中的故事让人沉醉
那里的雨还在下
雨中的童年忘记回家
那里的树已长大
儿时的我们看着它发芽
那里的花还在吗
闻到那芬芳就想回家
回家回家
回家看看阿爸阿妈
回家回家
回家看看梦中的她
那里的树已长大
儿时的我们看着它发芽
那里的花还在吗
闻到那芬芳就想回家
回家回家
回家看看阿爸阿妈
回家回家
回家看看梦中的她
回家回家
回家看看阿爸阿妈
回家回家
回家看看梦中的她
回家看看梦中的她
</textarea></div></div><br /><br /><br />
<script type="text/javascript">
var lrcPlayer=function(){return this.init.apply(this,arguments)};
lrcPlayer.prototype={
constructor:lrcPlayer,
init:function(opts){
this.lrcVec=new Array();
this.lyricTxtObj=document.getElementById(opts.lrcTxtID);
lyricTxt=this.lyricTxtObj.innerHTML;
this.showLrcObj=document.getElementById(opts.lrcShowID);
this.showLrcObj.style.fontSize=opts.gczh?opts.gczh:'1em';
this.showLrcObj.style.fontFamily=opts.gczt?opts.gczt:'隶书';
this.showLrcObj.style.fontWeight=opts.gcct?'bold':'normal';
this.showLrcObj.style.textAlign=opts.dqfs?opts.dqfs:'center';
this.showLrcObj.style.color=opts.gcys1?opts.gcys1:'gray';
this.showLrcObj.style.cursor='pointer';
gcys=opts.gcys?opts.gcys:'red';
sMode=opts.showMode?opts.showMode:0;
this.sLine=opts.gchs?opts.gchs:1;
this.isLoop=opts.playLoop?opts.playLoop:false;
this.handleLrc(lyricTxt);
this.prepareShow(sMode,opts.shys);
this.genPlayer(opts.audioURL);
},
prepareShow:function(sMode,shys){
for(k=0;k<this.sLine;k++){
sItem=document.createElement("span");
sItem.style.display="block";
sItem.style.marginBottom='4px';
if(k==0){
sItem.style.color=gcys;
sItem.style.fontSize='120%';
if(shys){
shadowStr='0 -1px 0px '+shys+',';
shadowStr+='-1px 0 0px '+shys+',';
shadowStr+='1px 0 0px '+shys+',';
shadowStr+='0 1px 0px '+shys;
sItem.style.textShadow=shadowStr;
}
}
if(sMode!=0)sItem.style.textAlign="left";
this.showLrcObj.appendChild(sItem);
}
if(sMode!=0){
this.showLrcObj.style.writingMode='tb-rl';
this.showLrcObj.style.msWritingMode='tb-rl';
this.showLrcObj.style.mozWritingMode='vertical-rl';
this.showLrcObj.style.webkitWritingMode='vertical-rl';
}
},
handleLrc:function(lyricTxt){
var lyriclist=lyricTxt.split(/\r|\n|\r\n/);
for(n=0;n<lyriclist.length;n++){
chkTime=lyriclist.match(/\[\d{1,2}:\d{2}.\d{1,3}\]/g);
if(chkTime){
tIdx=lyriclist.lastIndexOf(']');
if(tIdx>0)lrcTxt=lyriclist.substr(tIdx+1);
for(m=0;m<chkTime.length;m++){
ta=chkTime.substr(1).replace(']','').split(/:|\./);
_t=parseFloat(parseInt(ta,10)*60+parseInt(ta,10)+'.'+ta,10);
if(this.lrcVec.length==0&&_t!=0){
this.lrcVec.push();
}
this.lrcVec.push();
}
}
}
this.lrcVec.sort(function(a,b){return(a-b)});
},
genPlayer:function(mUrl){
this.mObj=document.createElement("audio");
this.mObj.loop=false;
this.mObj.muted=false;
this.mObj.src=mUrl;
this.mObj.controls=true;
this.mObj.style.opacity=0.3;
this.showLrcObj.appendChild(this.mObj);
this.idx=0;
this.mObj.onended=()=>{
this.idx=0;
this.lyricTxtObj.innerHTML='';
if(this.isLoop){
this.mObj.play();
document.getElementById('vid').play(); // 同步播放视频
}else{
this.mObj.controls=true;
}
};
this.mObj.onplaying=()=>{
this.mObj.controls=false;
document.getElementById('vid').play(); // 同步播放视频
};
this.mObj.onerror=()=>{
console.log("audio wrong, remove play start event");
this.showLrcObj.style.display='none';
this.showLrcObj.removeChild(this);
};
this.mObj.ontimeupdate=()=>{
if(this.idx<this.lrcVec.length){
if(this.mObj.currentTime>this.lrcVec){
_idx=this.idx;
_spans=this.showLrcObj.getElementsByTagName('span');
for(k=0;k<this.sLine;k++){
_spans.innerHTML=(_idx+k)>=this.lrcVec.length?"":this.lrcVec;
}
this.idx++;
}
}
};
this.showLrcObj.onclick=()=>{
const video = document.getElementById('vid');
if(this.mObj.paused){
this.mObj.play();
video.play(); // 同步播放视频
}else{
this.mObj.pause();
video.pause(); // 同步暂停视频
}
};
try{
this.mObj.play();
document.getElementById('vid').play(); // 同步播放视频
}catch(err){
console.log(err.message);
}
},
stopMusic:function(){
this.mObj.pause();
this.mObj.controls=false;
this.mObj=null;
document.getElementById('vid').pause(); // 同步暂停视频
}
};
var opts = {
lrcTxtID:'lrcContent', // 放置LRC的textarea标签的ID
lrcShowID:"layer", // 显示歌词的标签ID
audioURL:"https://cccimg.com/view.php/605b41fcab4bf31a5e1c2f3dec6a2f37.mp3", // 音频文件URL
gczh:'35px', // 歌词字体大小
gczt:'华文行楷', // 歌词字体
gcys:'#87CEEB', // 当前歌词显示颜色
gcys1:'Brown', // 后续歌词显示颜色
shys:'#DEF70B', // 歌词描边色
gcct:true, // 歌词是否加粗
dqfs:'center', // 歌词显示对齐方式
showMode:0, // 横排(0)或竖排(1)
playLoop:true, // 是否循环播放
gchs: 2 // 显示歌词行数
};
var km = new lrcPlayer(opts);
const xCenter = (el) => {
const rt = el.getBoundingClientRect();
const ww = window.innerWidth;
const ox = (ww - rt.width) / 2 - rt.left;
el.style.transform = `translateX(${ox}px)`;
};
xCenter(document.getElementById('vid'));
</script>
本帖最后由 杨帆 于 2025-12-14 17:35 编辑 <br /><br /><div class="locked">此帖仅作者可见</div>
本帖最后由 杨帆 于 2025-4-16 18:40 编辑 <br /><br /><div style="position: relative;width: 100%;height: 0;padding-top: 176.5%;overflow: hidden;border-radius: 5px;box-shadow: 5px 5px 5px #999;">
<iframe id="xlta" style="position: absolute;width: 100%;height: 100%;left: 0;top: 0;transform:scale(1)" frameborder="0" scrolling="no" allowfullscreen="true" allowtransparency="true" src="https://file.uhsea.com/2504/0ff29f9680e31c415dad1078aef8355dV0.html?v=&url=0200fg10000cj7p1b3c77u2o46crffg,0d00fg10000cj0g1rbc77u2105q7lh0,0d00fg10000cph844fog65kcs7lm4j0,0200fg10000cuu4rffog65li4jmsrog,1e00fgi0000cumisd7og65rrhhl7h1g"></iframe>
</div>
本帖最后由 杨帆 于 2025-6-5 23:24 编辑 <br /><br /><style>
#ifrm {
display: block;
margin: 0 0 30px -340px;
width: 1280px;
height: 750px;
z-index: 1;
}
</style>
<iframe id="ifrm" src="https://file.uhsea.com/2505/2647ac8e907893049e2ebbb28b97a078R1.html" allow="fullscreen" frameborder="0" scrolling="no"></iframe>
本帖最后由 杨帆 于 2025-5-18 14:33 编辑 <br /><br /><div style="position:absolute;z-index:32768;background:none;width:100%;left:0px;margin-top:0px;"><center><IFRAME src="https://file.uhsea.com/2505/41a988b10f4e6d168e578d8691a5b9cdH8.html" width="100%" height="1000px" marginWidth="0" marginHeight="0" frameBorder="0" scrolling="no" allow="fullscreen"></IFRAME></center></div><div style="height:1000px"></div><BR /><BR /><BR />
本帖最后由 杨帆 于 2025-12-5 16:50 编辑 <br /><br /><div class="locked">此帖仅作者可见</div> 本帖最后由 杨帆 于 2025-11-29 22:26 编辑 <br /><br /><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>人若向阳总少年</title>
</head>
<body>
<style>
#papa { --state: running; margin: 30px 0; left: calc(50% - 81px); transform: translateX(-50%); width: clamp(600px, 90vw, 1400px); height: auto; aspect-ratio: 16/9; background: url("https://638183.freep.cn/638183/t24/6/bt2w.jpg") no-repeat center/cover; box-shadow: 2px 2px 8px #000; overflow: hidden; z-index: 1; position: relative;perspective: 600px;user-select: none;--z: -300px;}
#btnFs { left: 20px; bottom: 20px; color: white; z-index: 99;}
#lzwrap { position: absolute; width: 100%; height: 100%; transform-style: preserve-3d; display: grid; place-items: center; }
li-zi { position: absolute; width: 40px; height: 40px; border-radius: 50%; background: url('https://638183.freep.cn/638183/small/hdxk.png') no-repeat center/cover;transform: rotateY(0) translate3d(0, 40px, var(--z)) rotateY(0); animation: runcircle 30s var(--delay) linear infinite var(--state); }
.lrc { z-index: 8; position: absolute; top: 8%; left: 50%; width: 740px; height: 250px; overflow: hidden; }
.lrc #ul { width: 100%; padding: 0; list-style: none; transition: 0.3s all ease; margin: 0; }
.lrc #ul li { color: SeaGreen; font: 600 30px STSong, sans-serif; transition: .3s all ease; list-style-type: none; text-align: center; display: block; padding: 0 10px; height: 50px; line-height: 50px; margin: 0 auto; cursor: pointer; }
.lrc #ul li.active { transform: scale(1.2); color: DeepPink; font-weight: 650; text-shadow: 1px 1px 0px #eee; }
.pTitle { width: 50%; height: 20%; line-height: 2em; color: transparent; font-family: STLiti, NSimSun, 'Microsoft YaHei'; font-size: 50px; font-weight: bold; text-align: center; margin: auto; z-index: 1; position: absolute; right: 1%; bottom: 1%; }
.sp { animation: flashTitle 8s linear infinite var(--state); }
.pTitle span:nth-child(1) { animation-delay: 0s; }
.pTitle span:nth-child(2) { animation-delay: 0.5s; }
.pTitle span:nth-child(3) { animation-delay: 1.0s; }
.pTitle span:nth-child(4) { animation-delay: 1.5s; }
.pTitle span:nth-child(5) { animation-delay: 2.0s; }
.pTitle span:nth-child(6) { animation-delay: 2.5s; }
.pTitle span:nth-child(7) { animation-delay: 3.0s; }
@keyframes flashTitle { 0%, 100% { color: white; text-shadow: 2px 2px 20px coral, 2px 2px 30px Orange, 2px 2px 40px Orange, 2px 2px 50px Orange, 2px 2px 60px Orange, 2px 2px 70px Orange, 2px 2px 80px coral; } 50%, 90% { color: transparent; text-shadow: none; } }
@keyframes flashing { 0% { filter: brightness(.8); } 100% { filter: brightness(1.2); } }
#box { position: absolute; left:45%;top:35%;width: 150px; height: 150px;transform-style: preserve-3d; transform: rotateX(-45deg) rotateY(45deg) rotateZ(0); animation: rot linear 16s infinite var(--state); z-index: 10; --xx: 75px;cursor:pointer; }
#front { transform: translateZ(var(--xx)); }
#back { transform: rotateY(180deg) translateZ(var(--xx)); }
#left { transform: rotateY(-90deg) translateZ(var(--xx)); }
#right { transform: rotateY(90deg) translateZ(var(--xx)); }
#top { transform: rotateX(90deg) translateZ(var(--xx)); }
#bottom { transform: rotateX(-90deg) translateZ(var(--xx)); }
.board { position: absolute; width: 100%; height: 100%; display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 1fr); gap: 2px; opacity: .8; }
.cell { opacity: 0.9; transition: transform 0.3s; }
.cell:hover { transform: scale(1.05); z-index: 10; background-color: rgba(255, 255, 255, 0.2); border: 1px solid white; }
@keyframes rot { to { transform: rotateX(315deg) rotateY(405deg) rotateZ(360deg); } }
@keyframes runcircle { to { transform: rotateY(-360deg) translate3d(0, 40px, var(--z)) rotateY(360deg) rotateZ(-10turn); } }
#vid1{ width: 100%; height: 100%; position: absolute; top: 0%; left: 0%; object-fit: cover; z-index: -1; opacity: .98; pointer-events: none; mix-blend-mode: screen; mask: linear-gradient(to top, red 20%, transparent 30%, transparent);-webkit-mask: linear-gradient(to top, red 20%, transparent 30%, transparent);}
#vid2{ width: 100%; height: 100%; position: absolute; top: 0%; left: 0%; object-fit: cover; z-index: -1; opacity: .98; pointer-events: none; mix-blend-mode: screen; mask: radial-gradient(transparent 15%, red); -webkit-mask: radial-gradient(transparent 15%, red); }
</style>
<div id="papa">
<div id="lzwrap"></div>
<div id="box" title="播放/暂停">
<div id="front" class="board"></div>
<div id="back" class="board"></div>
<div id="left" class="board"></div>
<div id="right" class="board"></div>
<div id="top" class="board"></div>
<div id="bottom" class="board"></div>
</div>
<img id ="IMG"src="https://642303.freep.cn/642303/za/feiniao.gif" alt="" style="left:1%;top:1%;width: 350px; height: 350px;position: absolute;z-index:1;">
<video id="vid1" src="https://video-qn.51miz.com/preview/video/00/00/12/68/V-126813-9655CF1F.mp4" autoplay loop muted></video>
<video id="vid2" src="https://bpic.588ku.com/video_listen/588ku_video/22/11/03/01/45/01/video6362ac9d14d34.mp4" autoplay loop muted></video>
<div class="pTitle">
<span class="sp">人</span>
<span class="sp">若</span>
<span class="sp">向</span>
<span class="sp">阳</span>
<span class="sp">总</span>
<span class="sp">少</span>
<span class="sp">年</span>
</div>
<div class="lrc">
<ul id="ul"></ul>
</div>
</div>
<audio id="aud" src="https://file.uhsea.com/2507/189f66485293a97c92a3de4ac057db7d9V.mp3" loop></audio>
<script>
var music = document.getElementById('aud');
var box = document.getElementById('box');
var vids = document.querySelectorAll(', .vid');
var pTitle = document.querySelector('.pTitle');
var image = document.getElementById('IMG');
box.onclick = function () {
if (aud.paused) {
aud.play();
box.style.setProperty('--state', 'running');
vid1.play();vid2.play();image.play();
pTitle.style.setProperty('--state', 'running');
} else {
aud.pause();
box.style.setProperty('--state', 'paused');
vid1.pause(); vid2.pause();image.stop();
pTitle.style.setProperty('--state', 'paused');
}
};
function getRandomColor() {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i < 6; i++) {
color += letters;
}
return color;
}
function generateUniqueColors() {
const colors = new Set();
while (colors.size < 9) {
colors.add(getRandomColor());
}
return Array.from(colors);
}
function initCubeFaces() {
const faces = document.querySelectorAll('.board');
faces.forEach(face => {
const colors = generateUniqueColors();
for (let i = 0; i < 9; i++) {
const cell = document.createElement('div');
cell.classList.add('cell');
cell.style.backgroundColor = colors;
face.appendChild(cell);
}
});
}
window.addEventListener('DOMContentLoaded', initCubeFaces);
let lrc = `
心若向阳总少年-姜雨涵
作词Lyricist by:小酒
作曲Composer by:姜雨涵
我不做天上仙
我悠闲在人间
我尝过酸苦甜
我心宽不抱怨
这日子一般般
这快乐很简单
这短短几十年
愿你我都尽欢
心若向阳总少年
莫把烦事放心间
青丝白发顺自然
刻意在乎太肤浅
心若向阳总少年
莫把烦事放心间
看这人生何其短
你要笑的格外甜
我不做天上仙
我悠闲在人间
我尝过酸苦甜
我心宽不抱怨
这日子一般般
这快乐很简单
这短短几十年
愿你我都尽欢
心若向阳总少年
莫把烦事放心间
青丝白发顺自然
刻意在乎太肤浅
心若向阳总少年
莫把烦事放心间
看这人生何其短
你要笑的格外甜
心若向阳总少年
莫把烦事放心间
青丝白发顺自然
刻意在乎太肤浅
心若向阳总少年
莫把烦事放心间
看这人生何其短
你要笑的格外甜
`;
let lrcArr = lrc.split('\n');
let result = [];
var audio = document.querySelector("#aud");
var ul = document.querySelector("#ul");
var container = document.querySelector(".lrc");
for (let i = 0; i < lrcArr.length; i++) {
var lrcData = lrcArr.split(']');
if (lrcData.length < 2) continue;
var lrcTime = lrcData.substring(1);
var obj = {
time: parseTime(lrcTime),
word: lrcData.trim()
}
result.push(obj);
}
function parseTime(lrcTime) {
let lrcTimeArr = lrcTime.split(":");
return +lrcTimeArr * 60 + parseFloat(lrcTimeArr);
}
function getIndex() {
let time = audio.currentTime;
for (let i = 0; i < result.length; i++) {
if (result.time > time) {
return i - 1;
}
}
return result.length - 1;
}
function createElements() {
let fragment = document.createDocumentFragment();
for (let i = 0; i < result.length; i++) {
let li = document.createElement("li");
li.innerText = result.word;
li.addEventListener("click", function () {
audio.currentTime = result.time;
setOffset();
});
fragment.appendChild(li);
}
ul.appendChild(fragment);
}
createElements();
let containerHeight = container.clientHeight;
let liHeight = ul.children?.clientHeight || 50;
let minOffset = 0;
let maxOffset = ul.clientHeight - containerHeight;
function setOffset() {
const index = getIndex();
if (index < 0) return;
const liHeight = ul.children?.clientHeight || 50;
let offset = liHeight * index - containerHeight / 2 + liHeight / 2;
offset = Math.max(minOffset, Math.min(offset, maxOffset));
ul.style.transform = `translateY(${-offset}px)`;
ul.querySelectorAll('.active').forEach(li => li.classList.remove('active'));
if (index < ul.children.length) {
ul.children.classList.add('active');
}
}
audio.addEventListener("timeupdate", setOffset);
if ('getContext' in document.createElement('canvas')) {
HTMLImageElement.prototype.play = function() {
if (this.storeCanvas) {
// 洢canvas
this.storeCanvas.parentElement.removeChild(this.storeCanvas);
this.storeCanvas = null;
//
image.style.opacity = '';
}
if (this.storeUrl) {
this.src = this.storeUrl;
}
};
HTMLImageElement.prototype.stop = function() {
var canvas = document.createElement('canvas');
//
var width = this.width, height = this.height;
if (width && height) {
// 洢
if (!this.storeUrl) {
this.storeUrl = this.src;
}
// canvasС
canvas.width = width;
canvas.height = height;
//
canvas.getContext('2d').drawImage(this, 0, 0, width, height);
//
try {
this.src = canvas.toDataURL("image/gif");
} catch(e) {
//
this.removeAttribute('src');
// canvas
canvas.style.position = 'absolute';
//
this.parentElement.insertBefore(canvas, this);
//
this.style.opacity = '0';
// 洢canvas
this.storeCanvas = canvas;
}
}
};
}
var image= document.getElementById("IMG");
</script>
<script type="module">
import { FS } from 'https://638183.freep.cn/638183/web/js/FS.js';
var total = 18;
Array.from({length: total}).forEach((lz, idx) => {
lz = document.createElement('li-zi');
lz.style.cssText += `
filter: hue-rotate(${360 * Math.random()}deg);
--delay: -${idx * 30 / total}s;
`;
lzwrap.appendChild(lz);
});
window.onresize = () => papa.style.setProperty('--z', -280 * papa.clientWidth/1400 + 'px');
FS(papa,box);
</script>
</body>
</html>
页:
[1]