index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. function Control(el, { value = 0,
  2. min = 0,
  3. max = 100,
  4. minAngle = -90, //9 часов
  5. maxAngle = 90, //3 часа
  6. wheelSpeed = 0.1,
  7. imgUrl = '1@3x.png',
  8. step = 5 } = {}) {
  9. const img = document.createElement('img')
  10. img.src = imgUrl
  11. el.append(img)
  12. //из value с учетом min max и minAngle maxAngle посчиитать угол
  13. const ratio = (maxAngle - minAngle) / (max - min)
  14. const getAngle = () => minAngle + ratio * value
  15. this.setValue = newValue => {
  16. if (newValue < min) {
  17. newValue = min
  18. }
  19. if (newValue > max) {
  20. newValue = max
  21. }
  22. if (typeof this.onchange === 'function' && newValue !== value) {
  23. this.onchange(newValue)
  24. }
  25. value = newValue
  26. img.style.transform = `rotate(${getAngle()}deg)`
  27. }
  28. img.onmousewheel = (event) => {
  29. const { deltaY } = event
  30. this.setValue(value + deltaY * wheelSpeed)
  31. event.preventDefault()
  32. }
  33. img.onclick = (event) => {
  34. const { layerX } = event
  35. this.setValue(value + (layerX < img.width / 2 ? -step : step))
  36. }
  37. this.getValue = () => value
  38. this.setValue(value)
  39. }
  40. const volumeControl = new Control(container1, { value: 100 })
  41. volumeControl.onchange = value => console.log('ON CHANGE', value) //на каждый setValue
  42. console.log(volumeControl.getValue())
  43. //пришейте к нему тэг audio для громкости
  44. let audio = document.querySelector('audio');
  45. volumeControl.onchange = volume => {
  46. audio.volume = volume / 100;
  47. console.log(volume);
  48. }
  49. // -------------------------------------------------------------------------------
  50. let box = document.getElementById('colorblock');
  51. function setRGB(value, n){
  52. box.style.backgroundColor = `rgb(${red.getValue()}, ${green.getValue()}, ${blue.getValue()})`
  53. }
  54. const red = new Control(container1, { min: 0, max: 255 })
  55. red.onchange = setRGB
  56. const green = new Control(container1, { min: 0, max: 255 })
  57. green.onchange = setRGB
  58. const blue = new Control(container1, { min: 0, max: 255 })
  59. blue.onchange = setRGB
  60. const colors = [red, green, blue]
  61. for(let i = 0; i < colors.length; i++) {
  62. colors[i].onchange = value => setRGB(value, i)
  63. }
  64. //сделать три крутилки для RGB
  65. //и обновлять цвет блока/фона блока при вращении любой из трех