亚伦影音工作室 发表于 2024-7-3 20:04

文本歌词播放器

本帖最后由 亚伦影音工作室 于 2024-7-4 21:21 编辑 <br /><br /><style>
#tz { left: 50%; transform: translateX(calc(-50% - 81px)); background:url('')no-repeat center/cover;width: 1200px; height: 700px; overflow: hidden; box-shadow: 2px 2px 6px #000; z-index: 1; position: relative; }

#bjbs{animation: rotating 1s linear infinite;width: 1200px; height:700px;position:absolute;z-index: 1;}
#bjbs img{ width: 100%; height: 100%;}
@keyframes rotating{50%{filter:hue-rotate(360deg)contrast(110%)brightness(100%);}}
#player { position: absolute; width: 100px;   left: 920px; bottom: 70px; cursor: pointer; animation: rot 6s linear infinite; opacity: 1; z-index: 5;}
@keyframes rot { to { transform: rotate(1turn); } }

#txtbox { position: absolute; left:10%;top: 80px; width: 1000px; min-height: 120px; padding: 10px 20px; box-sizing: border-box; overflow: hidden;writing-mode:vertical-lr; letter-spacing: 5px;z-index: 6;}
      #txtbox p { position: relative; margin: 4px 0; padding: 0; font: normal 24px/45px sans-serif; color: #fff; txtAr-shadow: 1px 1px 1px gray; animation: 2s forwards; }
      .tMid, .tRight { display: inline-block; width: 100%; }
      .tMid { text-align: center; }
      .tRight { text-align: right; font-size: 18px; }
@keyframes move { 100% { transform: translate(0); } }
</style>

<div id="tz">
<div id="bjbs"><img id="Img" src="https://pic.imgdb.cn/item/6684a788d9c307b7e94005b4.gif" alt="" /></div>
<audio id="aud" src="https://songs.boonkiong.com/2407038340.mp3" autoplay loop></audio>
<img id="player" alt="" title="播放" src="https://pic.imgdb.cn/item/65165dfcc458853aeff44557.png" />
<div id="txtbox"></div>
</div>
<script type="text/javascript">
bjbs.style.animationPlayState = aud.paused ? 'paused' : 'running';
aud.addEventListener('playing', () =>bjbs.style.animationPlayState = 'running');
aud.addEventListener('pause', () =>bjbs.style.animationPlayState = 'paused');
var image= document.getElementById("Img");
</script>

<script>
var txtAr = [
      `<span class="tMid"></span>
歌曲《年少的狂想 》
星星在天空沉默不语 指引着那方向
月亮会洒下皎洁余辉 投来温馨目光
蝴蝶在扇动翅膀 热烈为你鼓掌
瞳孔投射出 五彩斑斓的光芒
我要登上那山川之巅
呼吸自由的芬芳
我要踏过那深谷与沟壑
触摸年少的狂想
我要飞过那低洼沼泽
拥抱风儿的翅膀
我要爬上那 黑暗的深渊
沐浴胜利的阳光
我要登上那山川之巅
呼吸自由的芬芳
我要踏过那深谷与沟壑
触摸年少的狂想
我要飞过那低洼沼泽
拥抱风儿的翅膀
我要爬上那 黑暗的深渊
沐浴胜利的阳光
`,
      `<span class="tMid"></span>星星在天空沉默不语 指引着那方向
月亮会洒下皎洁余辉 投来温馨目光
蝴蝶在扇动翅膀 热烈为你鼓掌
瞳孔投射出 五彩斑斓的光芒
我要登上那山川之巅
呼吸自由的芬芳
我要踏过那深谷与沟壑
触摸年少的狂想
我要飞过那低洼沼泽
拥抱风儿的翅膀
我要爬上那 黑暗的深渊
沐浴胜利的阳光
我要登上那山川之巅
呼吸自由的芬芳
我要踏过那深谷与沟壑
触摸年少的狂想
我要飞过那低洼沼泽
拥抱风儿的翅膀
我要爬上那 黑暗的深渊
沐浴胜利的阳光
<span class="tRight"></span>`
];
var curIdx = 0;
var paras = [];
var ww = txtbox.offsetWidth;

var addPs = () => {
        var txtstr = txtAr;
        txtbox.innerHTML = '';
        paras.length = 0;
        var ar = txtstr.split(/\n/).filter(item => item !=='');
        ar.forEach((p,k) => {
                var para = document.createElement('p');
                para.innerHTML = p;
                para.style.cssText += `transform: translate(${ww}px);`;
                txtbox.appendChild(para);
                paras.push(para);
        });
        curIdx = (curIdx + 1) % txtAr.length;
        mkAni();
};

var parasReset = () => {
        addPs();
        paras.forEach(p => {
                p.style.animationName = '';
                p.style.transform = 'translate(${ww}px)';
                setTimeout( () => { paras.style.animationName = 'move'; }, 500);
        });
};

var mkAni = () => {
        paras.forEach((p,k) => {
                p.onanimationend = () => {
                        paras[(k+1) % paras.length].style.animationName = 'move';
                        if(k === paras.length - 1) setTimeout( () => parasReset(), 50000);
                };
        });
};

var mState = () => {
        [...paras,...].forEach(p => p.style.animationPlayState = aud.paused ? 'paused' : 'running');
       
        player.title = ['暂停', '播放'][+aud.paused];
};

aud.oncanplay = aud.onplaying = aud.onpause = () => mState();
player.onclick = () => aud.paused ? (aud.play(),image.play()) : (aud.pause(),image.stop());

addPs();
paras.style.animationName = 'move';
</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;
            }
      }
    };
}

</script>

梦油 发表于 2024-7-3 21:01

欣赏佳作,问候亚伦。

红影 发表于 2024-7-3 23:06

我貌似听不到音乐,所以按钮点上去也很奇怪,点击则可以暂停,再点击动态还在,但是不转了{:4_204:}

红影 发表于 2024-7-3 23:07

估计是忽然断链了,等过后再来看看。
欣赏亚伦老师好帖{:4_187:}
页: [1]
查看完整版本: 文本歌词播放器