js实现可拖拽快进快退老式碟片音乐播放器效果代码

代码语言:html

所属分类:多媒体

代码描述:js实现可拖拽快进快退老式碟片音乐播放器效果代码

代码标签: js 拖拽 快进 快退 老式 碟片 音乐 播放器

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>

  <meta charset="UTF-8">

  
  
<style>
:root {
	--color-theme:rgb(2,176,236);
	--color-record-center:#fff;
	--color-record-inner:#131313;
	--color-record-groove:#000;
	--color-record-outer:#000;
	--spacing-groove:10%;
	--font-family:"Poppins",cursive;
	--turntable-height:clamp(300px,90vmin,500px);
	--disc-dimension:calc(var(--turntable-height) * .9)
}
html {
	box-sizing:border-box
}
*,*:before,*:after {
	box-sizing:inherit
}
html,body {
	margin:0;
	padding:0
}
body {
	width:100%;
	height:100vh;
	overflow:hidden;
	overscroll-behavior:contain
}
.layout {
	width:100vw;
	height:100vh;
	display:flex;
	justify-content:center;
	align-items:center
}
.turntable {
	height:var(--turntable-height);
	display:inline-flex;
	gap:1rem;
	padding:calc(var(--turntable-height) * .05);
	background:rgb(233,233,233);
	border-radius:3px;
	box-shadow:12px 14px 18px 2px #a6a1a17f
}
.disc-container {
	aspect-ratio:1;
	height:100%;
	display:flex;
	justify-content:center;
	align-items:center;
	border-radius:50%;
	border:2px solid #000;
	background:linear-gradient(45deg,rgb(255,255,255),rgb(66,66,66))
}
.disc {
	position:relative;
	aspect-ratio:1;
	width:91%;
	overflow:hidden;
	border-radius:50%;
	background:repeating-radial-gradient(var(--color-record-inner),var(--color-record-groove) 2px,var(--color-record-groove) 2px,var(--color-record-inner) 4px);
	cursor:grab
}
.disc.is-scratching {
	cursor:grabbing
}
.disc__que {
	--dim:10px;
	position:absolute;
	top:50%;
	right:30px;
	width:var(--dim);
	height:var(--dim);
	background:var(--color-theme);
	border-radius:50%
}
.disc__label {
	position:absolute;
	top:50%;
	left:50%;
	transform:translate(-50%,-50%);
	display:flex;
	justify-content:center;
	align-items:center;
	text-align:center;
	width:calc(var(--disc-dimension) * .4);
	height:calc(var(--disc-dimension) * .4);
	background:no-repeat url(//repo.bfw.wiki/bfwrepo/icon/617245a85118d.png) center center;
	background-size:cover;
	border-radius:50%;
	pointer-events:none
}
.disc__middle {
	--dim:10px;
	position:absolute;
	top:50%;
	left:50%;
	transform:translate(-50%,-50%);
	width:var(--dim);
	height:var(--dim);
	background:rgb(26,26,26);
	border-radius:50%
}
.disc__glare {
	width:var(--disc-dimension);
	height:15%;
	position:absolute;
	top:50%;
	transform:translateY(-50%) rotate(-30deg);
	background:rgba(255,255,255,.15);
	filter:blur(10px);
	pointer-events:none
}
.sidebar {
	display:flex;
	height:100%
}
.controls {
	height:100%;
	display:flex;
	align-items:flex-end
}
.controls__row {
	justify-content:center;
	gap:10px
}
.control {
	font-family:var(--font-family);
	text-transform:uppercase
}
.rewind {
	display:none
}
.button {
	border-radius:0;
	border:none;
	background:rgb(69,69,69);
	font-size:10px;
	padding:.4rem;
	color:#fff;
	line-height:1.3;
	cursor:pointer;
	box-shadow:1px 1px 0 1px #000,0 0 0 0 var(--color-theme);
	will-change:box-shadow;
	transition:box-shadow .2s ease-out,transform .05s ease-in
}
.button.is-active {
	transform:translate(1px,2px);
	box-shadow:0 0 5px 1px var(--color-theme)
}

</style>



</head>

<body >
  <div class="layout">
      <div class="turntable">
        <div class="disc-container">
          <div class="disc" id="disc">
            <div class="disc__que"></div>
            <div class="disc__label"></div>
            <div class="disc__middle"></div>
          </div>
          <div class="disc__glare"></div>
        </div>

        <div class="sidebar">
          <div class="controls">
            <div class="controls__row">
              <button class="control button" id="playToggle">Power</button>
              <button class="control button rewind" id="rewind">
                &lt;&lt;
              </button>
            </div>
          </div>
        </div>
      </div>
    </div>

      <script >
(function() {
    const e = document.createElement("link").relList;
    if (e && e.supports && e.supports("modulepreload")) return;
    for (const n of document.querySelectorAll('link[rel="modulepreload"]')) s(n);
    new MutationObserver(n => {
        for (const o of n)
            if (o.type === "childList")
                for (const a of o.addedNodes) a.tagName === "LINK" && a.rel === "modulepreload" && s(a);
    }).observe(document, {
        childList: !0,
        subtree: !0
    });

    function t(n) {
        const o = {};
        return n.integrity && (o.integri.........完整代码请登录后点击上方下载按钮下载查看

网友评论0