index.html 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <!DOCTYPE html>
  2. <!-- <html lang="ru">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>JS-classwork-array</title>
  7. </head>
  8. <body>
  9. <button id='button1'>button1</button>
  10. <button id='button2'>button2</button> -->
  11. <html>
  12. <head>
  13. <meta charset="utf-8" />
  14. <meta name="viewport" content="width=device-width" />
  15. <link rel="stylesheet" href="style.css">
  16. <title>Другой тайтл ПРИВЕТ 17й</title>
  17. <style>
  18. #container1 {
  19. padding: 400px;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div id='colorMixer' style='width:50px; height:50px; border-radius:50%; border: 3px solid grey'></div>
  25. <div id='buttonContainer' class='buttonContainer'></div>>
  26. <div id='container1'></div>
  27. <!-- <script src="/js/task-sum-array.js" type="module"></script>
  28. <script src="/js/table.js" type="module"></script> -->
  29. <!-- <script src="/js/myFilter.js" type="module"></script> -->
  30. <!-- <script> -->
  31. <!-- // let counter = 0;
  32. // function clickCounter (element) {
  33. // let counter = 0;
  34. // element.onclick = function () {
  35. // let counter = 0;
  36. // return element.innerText=counter++;
  37. // }
  38. // }
  39. // clickCounter (button1);
  40. // clickCounter(button2);
  41. // </script> -->
  42. <script>
  43. function Control(el, { value = 0,
  44. min = 0,
  45. max = 100,
  46. minAngle = 0,
  47. maxAngle = 360,
  48. wheelSpeed = 0.05,
  49. step = 1 } = {}) {
  50. const img = document.createElement('img')
  51. img.src = '1@3x.png'
  52. el.append(img);
  53. img.className = "colorButton";
  54. const ratio = (maxAngle - minAngle) / (max - min)
  55. const getAngle = () => (value - min) * ratio + minAngle
  56. this.setValue = newValue => {
  57. if (newValue > max)
  58. newValue = max
  59. if (newValue < min)
  60. newValue = min
  61. if (typeof this.onchange === 'function' && newValue !== value)
  62. this.onchange(newValue)
  63. value = newValue
  64. img.style.transform = `rotate(${getAngle()}deg)`
  65. }
  66. img.onmousewheel = (event) => {
  67. const { deltaY } = event
  68. //console.log(deltaY)
  69. this.setValue(value + deltaY * wheelSpeed)
  70. event.preventDefault()
  71. }
  72. img.onclick = (event) => {
  73. const { layerX } = event
  74. if (layerX < img.width / 2)
  75. this.setValue(value - step)
  76. else
  77. this.setValue(value + step)
  78. event.preventDefault()
  79. }
  80. const event2Deg = event => {
  81. const { layerX, layerY } = event
  82. const { width, height } = img
  83. const x = layerX - width / 2
  84. const y = height / 2 - layerY
  85. //console.log(x, y, width, height)
  86. return ((Math.atan2(y, x) / (2 * Math.PI)) * 360 + 360) % 360
  87. }
  88. let prevAngle = null
  89. img.onmousedown = (event) => {
  90. prevAngle = event2Deg(event)
  91. }
  92. img.onmousemove = (event) => {
  93. if (prevAngle === null) return
  94. const currentAngle = event2Deg(event)
  95. const deltaValue = (prevAngle - currentAngle) / ratio
  96. //console.log(prevAngle - currentAngle, deltaValue)
  97. this.setValue(value + deltaValue)
  98. prevAngle = currentAngle
  99. event.preventDefault()
  100. }
  101. img.onmouseup = (event) => {
  102. prevAngle = null
  103. }
  104. this.setValue(value)
  105. this.getValue = () => value
  106. }
  107. const volumeControl = new Control(container1, {
  108. value: 75,
  109. min: 0,
  110. max: 100,
  111. minAngle: -90, maxAngle: 90
  112. })
  113. volumeControl.onchange = value => console.log('ON CHANGE', value) //на каждый setValue
  114. console.log(volumeControl.getValue())
  115. //пришейте к нему тэг audio для громкости
  116. function setRGB() {
  117. colorMixer.style.backgroundColor=`rgb(${red.getValue()},${green.getValue()},${blue.getValue()})`;
  118. //какой то блок, которому меняем цвет через rgba и цвета крутилок
  119. }
  120. const red = new Control(buttonContainer, {min: 0, max: 255})
  121. red.onchange = setRGB
  122. const green = new Control(buttonContainer, {min: 0, max: 255})
  123. green.onchange = setRGB
  124. const blue = new Control(buttonContainer, {min: 0, max: 255})
  125. blue.onchange = setRGB
  126. ////сделать три крутилки для RGB
  127. ////и обновлять цвет блока/фона блока при вращении любой из трех
  128. //setTimeout(() => volumeControl.setValue(80), 2000)
  129. </script>
  130. </body>
  131. </html>