谁动了我的琴弦(马黑黑原创)
本帖最后由 朵拉 于 2024-2-26 23:24 编辑 <br /><br /><style>#mydiv {
margin: 0 0 0 calc(50% - 593px);
position: relative;
width: 1024px;
height: 640px;
background: url('https://pic.imgdb.cn/item/65ce04eb9f345e8d03bddb08.jpg') no-repeat center/cover;
border: 1px solid gray;
position: relative;
}
#player {
position: absolute;
right: 20px;
top: 20px;
cursor: pointer;
animation: rot 5s linear infinite var(--state);
}
@keyframes rot { to { transform: rotate(360deg); } }
</style>
<div id="mydiv">
<audio id="aud" src="http://www.kumeiwp.com/sub/filestores/2023/07/19/0decda15fafe3e6b1149935a61c7e0be.mp3"></audio>
<img id="player" src="https://638183.freep.cn/638183/small/hxxb.png" alt="" />
</div>
<script>
var flashId; //setTimeout定时器运行ID: 用于音频不允许自动播放时
//联动函数 : 与音频播放暂停同步联动 - 关键帧动画、播放器提示语
mState = () => {
aud.paused
? (mydiv.style.setProperty('--state','paused'), player.title = '点击播放')
: (mydiv.style.setProperty('--state','running'), player.title = '点击暂停')
;
};
//flash函数 : 音频禁止自动播放是调用 - 播放器变大变小,引导访问者点击
flash = () => {
let idx = Math.round(Math.random());
let val = ;
player.style.transform = `scale(${val})`;
//setTimeout定时器递归调用此函数
flashId = setTimeout(flash,300);
};
//aud.play事件Promise链式处理
aud.play().then(() => {
mState(); //音频正常自动播放 : 运行联动函数
}).catch(err => { //俘获错误
if (err.name === "NotAllowedError") {
flash(); //禁止自动播放时运行flash函数
} else {
alert(err); //音频加载出错时显示错误信息
}
mState(); //即便不能播放也要运行联动函数
});
//下面是两个audio控件监听事件
aud.addEventListener('pause', mState);
aud.addEventListener('playing', mState);
//播放按钮点击事件
player.onclick = () => {
//如果 flashID 活跃中(不能自动播放时会被赋值)
if(flashId) {
flashId = clearTimeout(flashId); //销毁它
//复原播放器的transform 属性让道给animation)
player.style.transform = 'unset';
}
//按钮自己本分活儿 : 音频播放时停放、暂停时播放
aud.paused ? aud.play() : aud.pause();
}
</script> @马黑黑
老师 晚上好,学生交作业,请指正哈{:4_190:} 辛苦哈 漂亮。欣赏朵宝好帖{:4_204:} 优秀作业{:4_187:}
页:
[1]