红影 发表于 2023-6-30 21:43
就是你说的emoji字符吧。
emoji字符是可以直接以字符而不是编码出现的,即使是在代码里,前提是网页编码得是 UTF-8,而这里是 GBK
<style>
#papa {
margin: 0px 0 0 calc(50% - 593px);
width: 1024px;
height: 630px;
background: gray url('https://pic.imgdb.cn/item/611351cc5132923bf8ef79cb.jpg') no-repeat center/cover;
box-shadow: 3px 3px 20px #000;
position: relative;
border-radius: 12px;
}
#mydiv {
position: absolute;
left: 60px; top: 178px;
padding: 20px 10px;
width:270px;
height:206px;
border-radius:25px 15px;
box-shadow: 0px 0px 2px #eaeaea;
color: navy;
background: #eaeaea;
--state: paused;
}
#mydiv::before {
content: attr(data-tt);
position: absolute;
left: 86px;
bottom: -6px;
padding: 0 20px;
font-size: 14px;
line-height: 20px;
}
#mydiv p { padding: 8px 0; font-size: 16px; }
#mplayer {
position: absolute;
width: 58px;
height: 58px;
background: conic-gradient(DimGray,LightGrey,DimGray,LightGrey);
border-radius: 50%;
bottom: -76px;
left: 116px;
cursor: pointer;
pointer-events: auto;
animation: rot 5s infinite linear var(--state);
}
#mlist { margin: 20px; column-count: 2; column-rule: 2px solid transparent; column-gap: 30px; column-fill: balance; }
#mlist > span { display: block; width: fit-content; }
#mlist a { text-decoration: none; }
#mlist > span > a:hover { cursor: pointer; color: red; }
.lighten > a { color: red; }
.normal > a { color:navy; }
.wenzi { position: absolute; left:150px; bottom: 240px; color: navy; font: italic normal 12px/20px 'FangSong',serif; opacity: .95; }
@keyframes rot { to { transform: rotate(360deg); } }
</style>
<div id="papa">
<div id="mydiv" data-tt="00:00/00:00">
<div id="mlist" ></div>
<div id="mplayer"></div></div>
<div class="wenzi">——李志辉作品精选</div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=444323047" autoplay="autoplay"></audio>
<script>
(function () {
let spans = [];
let ypAr = [['444323047','步步莲花'],['30413344','水墨兰亭'],['131149','紫禁花园'],['522467506','云门'],['522468278','一拂尘烟'],['30413351','禅茶人生'],['131245','平遥古韵'],['522467321','天地行云'],['30413352','云水潇湘'],['30413343','太极幻影']];
ypAr.forEach((item) => item = 'https://music.163.com/song/media/outer/url?id=' + item);
ypAr.forEach((item, key) => {let sp = document.createElement('span');sp.className = 'normal';sp.innerHTML = `${key+1} <a onclick="javascript:mplay(${key})">${ypAr}</a>`;mlist.appendChild(sp);spans.push(sp);});
let toMin = (val) => {if (!val) return '00:00';val = Math.floor(val);let min = parseInt(val / 60),sec = parseFloat(val % 60);if (min < 10) min = '0' + min;if (sec < 10) sec = '0' + sec;return min + ':' + sec;};
mplay = (idx, flag = 0) => {aud.src = ypAr;if (flag >= 0) aud.play();spans.className = 'normal';spans.className = 'lighten';lastIdx = idx;}
let mState = () => mydiv.style.setProperty('--state', aud.paused ? 'paused' : 'running');
aud.addEventListener('play', mState, false);
aud.addEventListener('pause', mState, false);
aud.addEventListener('ended', () => mplay(Math.floor(Math.random() * ypAr.length)));
aud.addEventListener('timeupdate', () => mydiv.dataset.tt = toMin(aud.currentTime) + ' / ' + toMin(aud.duration));
mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
let lastIdx = Math.floor(Math.random() * ypAr.length);
mplay(lastIdx);
})();
</script>
我就加个底图,去掉了边框上的文字,别的好像也没动啊,结果无法选曲了,找不出原因。晕死,折腾好久也不知道怎么回事,黑黑帮着看看呗{:4_184:}
本帖最后由 马黑黑 于 2023-7-1 07:16 编辑
红影 发表于 2023-7-1 00:35
我就加个底图,去掉了边框上的文字,别的好像也没动啊,结果无法选曲了,找不出原因。晕死,折腾好久也不知 ...
我无法编辑你的帖子,权限约束。
红影 发表于 2023-7-1 00:35
我就加个底图,去掉了边框上的文字,别的好像也没动啊,结果无法选曲了,找不出原因。晕死,折腾好久也不知 ...
代码中出现的错误主要是帖子父元素设置了 pointer-events: none; 属性和值,该属性用于禁止、开放鼠标点击动作。我常常使用这个属性,目的在于高效利用伪元素。你这个帖子,不需要伪元素的交互操作,父元素就不需要设置此属性,可将所有的 pointer-events 属性和值全部删除。很多属性会有继承性,你在父元素设置了相应属性,子孙元素会跟着继承。
整理后的代码如下:
<style>
#papa {
margin: 0px 0 0 calc(50% - 593px);
width: 1024px;
height: 630px;
background: gray url('https://pic.imgdb.cn/item/611351cc5132923bf8ef79cb.jpg') no-repeat center/cover;
box-shadow: 3px 3px 20px #000;
position: relative;
}
#mydiv {
position: absolute;
left: 60px; top: 178px;
padding: 20px 10px;
width:270px;
height:206px;
border-radius:25px 15px;
box-shadow: 0px 0px 2px #eaeaea;
color: navy;
background: #eaeaea;
--state: paused;
}
#mydiv::before {
content: attr(data-tt);
position: absolute;
left: 86px;
bottom: -6px;
padding: 0 20px;
font-size: 14px;
line-height: 20px;
}
#mydiv p { padding: 8px 0; font-size: 16px; }
#mplayer {
position: absolute;
width: 58px;
height: 58px;
background: conic-gradient(DimGray,LightGrey,DimGray,LightGrey);
border-radius: 50%;
bottom: -76px;
left: 116px;
cursor: pointer;
animation: rot 5s infinite linear var(--state);
}
#mlist { margin: 20px; column-count: 2; column-rule: 2px solid transparent; column-gap: 30px; column-fill: balance; }
#mlist > span { display: block; width: fit-content; }
#mlist a { text-decoration: none; }
#mlist > span > a:hover { cursor: pointer; color: red; }
.lighten > a { color: red; }
.normal > a { color: var(--fColor); }
@keyframes rot { to { transform: rotate(360deg); } }
</style>
<div id="papa">
<div id="mydiv" data-tt="00:00/00:00">
<div id="mlist" ></div>
<div id="mplayer"></div>
</div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=444323047" autoplay="autoplay"></audio>
<script>
(function () {
let spans = [];
let ypAr = [['444323047','步步莲花'],['30413344','水墨兰亭'],['131149','紫禁花园'],['522467506','云门'],['522468278','一拂尘烟'],['30413351','禅茶人生'],['131245','平遥古韵'],['522467321','天地行云'],['30413352','云水潇湘'],['30413343','太极幻影']];
ypAr.forEach((item) => item = 'https://music.163.com/song/media/outer/url?id=' + item);
ypAr.forEach((item, key) => {let sp = document.createElement('span');sp.className = 'normal';sp.innerHTML = `${key+1} <a onclick="javascript:mplay(${key})">${ypAr}</a>`;mlist.appendChild(sp);spans.push(sp);});
let toMin = (val) => {if (!val) return '00:00';val = Math.floor(val);let min = parseInt(val / 60),sec = parseFloat(val % 60);if (min < 10) min = '0' + min;if (sec < 10) sec = '0' + sec;return min + ':' + sec;};
mplay = (idx, flag = 0) => {aud.src = ypAr;if (flag >= 0) aud.play();spans.className = 'normal';spans.className = 'lighten';lastIdx = idx;}
let mState = () => mydiv.style.setProperty('--state', aud.paused ? 'paused' : 'running');
aud.addEventListener('play', mState, false);
aud.addEventListener('pause', mState, false);
aud.addEventListener('ended', () => mplay(Math.floor(Math.random() * ypAr.length)));
aud.addEventListener('timeupdate', () => mydiv.dataset.tt = toMin(aud.currentTime) + ' / ' + toMin(aud.duration));
mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
let lastIdx = Math.floor(Math.random() * ypAr.length);
mplay(lastIdx);
})();
</script>
一上来赶紧来看这个,原来折腾我那么长时间的原因,只是父元素里的pointer-events: none;被继承了。这个下回可记住了{:4_173:}
直观的二次贝塞尔曲线,这个经常在贴子里出现{:4_199:}
红影 发表于 2023-7-1 11:15
一上来赶紧来看这个,原来折腾我那么长时间的原因,只是父元素里的pointer-events: none;被继承了。这个下 ...
非必要的属性不要设置。
之所以一直建议自己动手从头到尾做一个帖子的用意在于:去组织自己的代码,明白每一句代码的含义。
花飞飞 发表于 2023-7-1 11:40
直观的二次贝塞尔曲线,这个经常在贴子里出现
二次贝塞尔曲线比较简单,凭空就可以写出来
马黑黑 发表于 2023-7-1 11:40
非必要的属性不要设置。
之所以一直建议自己动手从头到尾做一个帖子的用意在于:去组织自己的代码,明 ...
嗯嗯,每次碰到问题,倒是更能让人认识到各个语句的真实作用和限制,也是好事呢。
我赶紧把这个帖子送清舟去,本来就是想告诉她,用你的代码可以自己组个喜欢的歌曲的专辑,不用每次去找专辑了{:4_173:}
红影 发表于 2023-7-1 12:07
嗯嗯,每次碰到问题,倒是更能让人认识到各个语句的真实作用和限制,也是好事呢。
我赶紧把这个帖子送清 ...
用心了
马黑黑 发表于 2023-6-30 22:51
领会控制点与曲线形态的关系问题,就能理解了二次贝塞尔曲线的原理
还好对二次贝塞尔曲线倒还是比较清楚了。
马黑黑 发表于 2023-7-1 11:40
非必要的属性不要设置。
之所以一直建议自己动手从头到尾做一个帖子的用意在于:去组织自己的代码,明 ...
其实这个仍然是套用代码呢,结果没套用明白。{:4_173:}
马黑黑 发表于 2023-7-1 12:12
用心了
能够这样组成自己的专辑,清舟一定很开心{:4_173:}
红影 发表于 2023-7-1 15:02
能够这样组成自己的专辑,清舟一定很开心
最近好像很忙呢
红影 发表于 2023-7-1 14:44
还好对二次贝塞尔曲线倒还是比较清楚了。
这就好
马黑黑 发表于 2023-6-30 19:02
能帮助理解就好
控制点换个位置,很直观的看出变化了。。。
南无月 发表于 2023-7-1 18:18
控制点换个位置,很直观的看出变化了。。。
对
马黑黑 发表于 2023-7-1 18:24
对
要什么样的曲线,头尾确定后,可以看着找控制点了
南无月 发表于 2023-7-1 18:27
要什么样的曲线,头尾确定后,可以看着找控制点了
对的。但是,曲线的点与控制点,都是可以灵活的,这里为了演示,将两端固定了。