const redValue = document.getElementById("red"); const greenValue = document.getElementById("green"); const blueValue = document.getElementById("blue"); function Control(el, {value=0, min=0, max=100, minAngle=0, maxAngle=360, wheelSpeed=0.05, step=1}={}){ const img = document.createElement('img') img.src = './assets/1@3x.png' el.append(img) const ratio = (maxAngle - minAngle) / (max - min) const getAngle = () => (value - min) * ratio + minAngle this.setValue = newValue => { if (newValue > max) newValue = max if (newValue < min) newValue = min if (typeof this.onchange === 'function' && newValue !== value) this.onchange(newValue) value = newValue img.style.transform = `rotate(${getAngle()}deg)` } img.onmousewheel = (event) => { const {deltaY} = event //console.log(deltaY) this.setValue(value + deltaY * wheelSpeed) event.preventDefault() } img.onclick = (event) => { const {layerX} = event if (layerX < img.width/2) this.setValue(value -step) else this.setValue(value +step) event.preventDefault() } const event2Deg = event => { const {layerX, layerY} = event const {width, height} = img const x = layerX - width/2 const y = height/2 - layerY //console.log(x, y, width, height) return ((Math.atan2(y, x) / (2 * Math.PI)) * 360 + 360) % 360 } let prevAngle = null img.onmousedown = (event) => { prevAngle = event2Deg(event) } img.onmousemove = (event) => { if (prevAngle === null) return const currentAngle = event2Deg(event) const deltaValue = (prevAngle - currentAngle) / ratio //console.log(prevAngle - currentAngle, deltaValue) this.setValue(value +deltaValue) prevAngle = currentAngle event.preventDefault() } img.onmouseup = (event) => { prevAngle = null } this.setValue(value) this.getValue = () => value } const red = new Control(container1, {min: 0, max: 255}) red.onchange = setRGB; const green = new Control(container1, {min: 0, max: 255}) green.onchange = setRGB const blue = new Control(container1, {min: 0, max: 255}) blue.onchange = setRGB ////сделать три крутилки для RGB ////и обновлять цвет блока/фона блока при вращении любой из трех //setTimeout(() => volumeControl.setValue(80), 2000) // } function setRGB(){ redValue.value = red.getValue().toFixed(); greenValue.value = green.getValue().toFixed(); blueValue.value = blue.getValue().toFixed(); document.body.style.backgroundColor = `rgb(${red.getValue()}, ${green.getValue()}, ${blue.getValue()})`; //какой то блок, которому меняем цвет через rgba и цвета крутилок } const volumeControl = new Control(container2, {value: 75, min: 0, max: 100, minAngle: -90, maxAngle: 90}) console.log(volumeControl); volumeControl.onchange = setVolume; const audio = document.getElementById("audio"); function setVolume(){ audio.volume = (volumeControl.getValue())/100 console.log( audio.volume) } //пришейте к нему тэг audio для громкости