123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- function Control(el, {value=0,
- min=0,
- max=100,
- minAngle=0,
- maxAngle=360,
- wheelSpeed=0.1,
- step=1}={}){
- const img = document.createElement('img');
- img.src = '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;
- 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;
- return ((Math.atan2(y, x)/ (2 * Math.PI)) * 360 + 360) % 360;
- // console.log(x, y, Math.atan2(y, x));
- };
- 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;
- }
- function setRGB(getValue){
- document.body.style.backgroundColor = `rgb(${red.getValue()}, ${green.getValue()}, ${blue.getValue()})`;
- }
- 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;
- const volumeControl = new Control(volume, {
- min: 0,
- max: 1,
- wheelSpeed: 0.0005,
- step: 0.01
-
- });
- volumeControl.onchange = setVolume;
- function setVolume() {
- music.volume = volumeControl.getValue();
- }
|