index.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. const volumeControl = new Control(container1, {value: 75, minAngle: -180})
  44. volumeControl.onchange = (value => console.log('ON CHANGE', value)) //на каждый setValue
  45. //console.log(volumeControl.getValue())
  46. //пришейте к нему тэг audio для громкости
  47. function setRGB(value, n){
  48. let arr = ['rgb', '(', red.getValue(), ', ', green.getValue(), ', ', blue.getValue(), ')']
  49. arr[n + n + 2] = value
  50. colorBox.style.backgroundColor = arr.join('')
  51. }
  52. const red = new Control(container2, {min: 0, max: 255})
  53. red.onchange = (value) => setRGB(value,0)
  54. const green = new Control(container2, {min: 0, max: 255})
  55. green.onchange = (value) => setRGB(value,1)
  56. const blue = new Control(container2, {min: 0, max: 255})
  57. blue.onchange = (value) => setRGB(value,2)
  58. //setTimeout(() => volumeControl.setValue(80), 2000)