js+svg实现音量控制动画效果代码
代码语言:html
所属分类:动画
代码描述:js+svg实现音量控制动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
*, *:before, *:after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html, body {
font-size: 62.5%;
}
body {
background-color: #21282C;
overflow: hidden;
}
.speaker {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -100%);
width: 10rem;
height: 7.7rem;
}
.vlCtrl {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, 150%);
height: 2.7rem;
width: 28rem;
}
svg, path {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#ctrlCirce {
cursor: default;
}
.volElem {
fill: none;
stroke-width: 5;
stroke-linecap: round;
stroke-linejoin: round;
stroke-miterlimit: 10;
}
</style>
</head>
<body>
<div class="speaker" >
<svg viewBox="0 0 100 77" xmlns="http://www.w3.org/2000/svg">
<path id="speakB" class="volElem" stroke="#9E7818" d="M51.2,18.5v-13c0-2.1-2.5-3.3-4.1-1.9L21.8,25.9c-1.4,1.2-3.1,1.9-4.9,1.9H8.2c-2.3,0-4.2,1.9-4.2,4.2v13.3c0,2.3,1.9,4.2,4.2,4.2H17c1.9,0,3.7,0.7,5.1,1.9l25,22c1.6,1.4,4.1,0.3,4.1-1.9v-13" opacity="0.4"/>
<path id="speakF" class="volElem" stroke="#F4AF0A" d="M51.2,18.5v-13c0-2.1-2.5-3.3-4.1-1.9L21.8,25.9c-1.4,1.2-3.1,1.9-4.9,1.9H8.2c-2.3,0-4.2,1.9-4.2,4.2v13.3c0,2.3,1.9,4.2,4.2,4.2H17c1.9,0,3.7,0.7,5.1,1.9l25,22c1.6,1.4,4.1,0.3,4.1-1.9v-13"/>
<path id="arcBigB" class="volElem" stroke="#9E7818" d="M72.2,64.1C81.1,59,87,49.4,87,38.5c0-10.9-5.9-20.5-14.8-25.6" opacity="0.4"/>
<path id="arcBigF" class="volElem" stroke="#F4AF0A" d="M72.2,64.1C81.1,59,87,49.4,87,38.5c0-10.9-5.9-20.5-14.8-25.6"/>
<path id="arcSmB" class="volElem" stroke="#9E7818" d="M59,51.3c4.4-2.6,7.4-7.4,7.4-12.8s-3-10.3-7.4-12.8" opacity="0.4" />
<path id="arcSmF" class="volElem" stroke="#F4AF0A" d="M59,51.3c4.4-2.6,7.4-7.4,7.4-12.8s-3-10.3-7.4-12.8"/>
<line id="crossLtRb" class="volElem" opacity="0.6" stroke="#CE9610" x1="43.8" y1="29.2" x2="62.6" y2="47.8" transform="scale(0)" />
<line id="crossLbRt" class="volElem" opacity="0.6" stroke="#CE9610" x1="62.6" y1="29.2" x2="43.8" y2="47.8" transform="scale(0)" />
</svg>
</div>
<div class=""></div>
<div class="vlCtrl">
<svg viewBox="0 0 280 27" xmlns="http://www.w3.org/2000/svg">
<line id="ctrlLineB" class="volElem" stroke="#9E7818" x1="13" y1="13.5" x2="261.2" y2="13.5" opacity="0.3"/>
<line id="ctrlLineF" class="volElem" stroke="#F4AF0A" x1="13" y1="13.5" x2="261.2" y2="13.5"/>
<circle id="ctrlCirce" cx="261.2" cy="13.5" r="13" fill="#F4AF0A"/>
</svg>
</div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
<script >
$(document).ready(function () {
var qs = (el = "") => document.querySelector(el);
var fromTo = (from, to, prgrs = 0) => from + (to - from) * prgrs;
var getCenter = (line = {}) => {
return {
x: (+line.getAttribute("x1") + +line.getAttribute("x2")) / 2,
y: (+line.getAttribute("y1") + +line.getAttribute("y2")) / 2 };
};
var getScalePoint = (obj = {}, onScene = true) => {
if (!onScene) {
let svgRect = obj.getBBox();
return {
x: svgRect.x + svgRect.width / 2,
y: svgRect.y + svgRect.height / 2 };
}
let rect = obj.getBoundingClientRect();
return {
x: rect.width / 2,
y: rect.height / 2 };
};
var volObj = {
speakB: qs("#speakB"),
arcBigB: qs("#arcBigB"),
arcSmB: qs("#arcSmB"),
speakF: qs("#speakF"),
arcBigF: qs("#arcBigF"),
arcSmF: qs("#arcSmF"),
crossLtRb: qs("#crossLtRb"),
crossLbRt: qs("#crossLbRt"),
ctrlCirce: qs("#ctrlCirce"),
ctrlLineF: qs("#ctrlLineF"),
ctrlLineB: qs("#ctrlLineB") };
var pathLen = {
arcBigLen: volObj.arcBigF.getTotalLength(),
arcSmLen: volObj.arcSmF.getTotalLength(),
speakLen: volObj.speakF.getTotalLength() };
var transforms = {
translate3D: function (x = 0, y = 0, z = 0, el = "px") {
return `translate3D(${x}${el}, ${y}${el}, ${z}${el})`;
},
translate: function (x = 0, y = 0, el = "px") {
return `translate(${x}${el}, ${y}${el})`;
},
rotate3d: function (x = 0, y = 0, z = 0, deg = 0) {
return `rotate3d(${x}, ${y}, ${z}, ${deg}deg)`;
},
rotate: function (deg = 0) {
return `rotate(${deg}deg)`;
},
scale: function (x = 1, y = 1) {
return `scale(${x}, ${y})`;
},
perspective: function (val = 0, el = "px") {
return `perspective(${val}${el})`;
} };
var easing = {
inCubic: function (t, b, c, d) {
var ts = (t /= d) * t;
.........完整代码请登录后点击上方下载按钮下载查看
网友评论0