index.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. function Control(el, {value=50,
  2. min=0,
  3. max=100,
  4. minAngle=-90,
  5. maxAngle=90,
  6. wheelSpeed=0.1,
  7. step=1}={}){
  8. const img = document.createElement('img')
  9. img.src = '13x.png'
  10. el.append(img)
  11. const ratio = (maxAngle - minAngle) / (max - min) //цена единицы value в градусах
  12. const getAngle = () => (value - min) * ratio + minAngle //подсчитали отступ в единицах, пересчитали в градусы и прибавили к стартовому углу
  13. this.setValue = (newValue) => {
  14. if (newValue < min){
  15. newValue = min
  16. }
  17. if (newValue > max){
  18. newValue = max
  19. }
  20. value = newValue
  21. if (typeof this.onchange === 'function'){
  22. this.onchange(value)
  23. }
  24. img.style.transform = `rotate(${getAngle()}deg)`
  25. }
  26. this.getValue = () => value
  27. img.onmousewheel = (e) => {
  28. const {deltaY} = e
  29. //console.log(deltaY)
  30. e.preventDefault()
  31. this.setValue(value + deltaY*wheelSpeed)
  32. }
  33. img.onclick = (e) => {
  34. const {layerX} = e
  35. console.log(e, layerX)
  36. if (layerX > img.width/2)
  37. this.setValue(value +step)
  38. else
  39. this.setValue(value -step)
  40. }
  41. this.setValue(value)
  42. }
  43. let $song = document.querySelector('.mySong')
  44. const volumeControl = new Control(container1, {value: 75, minAngle: -180})
  45. volumeControl.onchange = (value => {
  46. $song.volume = value / 100
  47. })
  48. setTimeout(() => volumeControl.setValue(80), 2000)
  49. function setRGB(value, n){
  50. let arr = ['rgb', '(', red.getValue(), ', ', green.getValue(), ', ', blue.getValue(), ')']
  51. arr[n + n + 2] = value
  52. colorBox.style.backgroundColor = arr.join('')
  53. }
  54. const red = new Control(container2, {min: 0, max: 255})
  55. red.onchange = (value) => setRGB(value,0)
  56. const green = new Control(container2, {min: 0, max: 255})
  57. green.onchange = (value) => setRGB(value,1)
  58. const blue = new Control(container2, {min: 0, max: 255})
  59. blue.onchange = (value) => setRGB(value,2)