index.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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 = 'img/1@3x.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. const volumeControl = new Control(container1, {value: 75, minAngle: -180})
  44. volumeControl.onchange = value => {
  45. audio.volume = value / 100;
  46. console.log('ON CHANGE', value)
  47. } //на каждый setValue
  48. //console.log(volumeControl.getValue())
  49. //пришейте к нему тэг audio для громкости
  50. const audio = document.createElement("audio")
  51. audio.src = "music/Мюслі UA - Вова, їбаш їх блять.mp3"
  52. document.body.append(audio)
  53. audio.setAttribute("controls", "")
  54. audio.style.display = "block"
  55. audio.style.marginLeft = "auto"
  56. audio.style.marginRight = "auto"
  57. function setRGB(){
  58. console.log('setRGB')
  59. let redRGB = red.getValue()
  60. let greenRGB = green.getValue()
  61. let blueRGB = blue.getValue()
  62. let autoRGB = (colorDiv.style.background = `rgb(${redRGB}, ${greenRGB}, ${blueRGB})`)
  63. return console.log(setRGB)
  64. //какой то блок, которому меняем цвет через rgba и значения крутилок
  65. }
  66. const colorDiv = document.createElement("div")
  67. colorDiv.style.width = "500px"
  68. colorDiv.style.height = "500px"
  69. /* colorDiv.style.backgroundColor = "red" */
  70. colorDiv.style.display = "block"
  71. colorDiv.style.marginLeft = "auto"
  72. colorDiv.style.marginRight = "auto"
  73. document.body.append(colorDiv)
  74. const red = new Control(container1, {min: 0, max: 255})
  75. red.onchange = setRGB
  76. const green = new Control(container1, {min: 0, max: 255})
  77. green.onchange = setRGB
  78. const blue = new Control(container1, {min: 0, max: 255})
  79. blue.onchange = setRGB
  80. ////сделать три крутилки для RGB
  81. ////и обновлять цвет блока/фона блока при вращении любой из трех
  82. //setTimeout(() => volumeControl.setValue(80), 2000)