main.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. function Control(
  2. el,
  3. {
  4. value = 10,
  5. min = 0,
  6. max = 100,
  7. minAngle = -90,
  8. maxAngle = 90,
  9. wheelSpeed = 0.1,
  10. step = 1,
  11. } = {}
  12. ) {
  13. const img = document.createElement("img");
  14. img.src = "1@3x.png";
  15. el.append(img);
  16. const ratio = (maxAngle - minAngle) / (max - min); //цена единицы value в градусах
  17. const getAngle = () => (value - min) * ratio + minAngle; //подсчитали отступ в единицах, пересчитали в градусы и прибавили к стартовому углу
  18. this.setValue = (newValue) => {
  19. if (newValue < min) {
  20. newValue = min;
  21. }
  22. if (newValue > max) {
  23. newValue = max;
  24. }
  25. value = newValue;
  26. if (typeof this.onchange === "function") {
  27. this.onchange(value);
  28. }
  29. img.style.transform = `rotate(${getAngle()}deg)`;
  30. };
  31. this.getValue = () => value;
  32. img.onmousewheel = (e) => {
  33. const { deltaY } = e;
  34. e.preventDefault();
  35. this.setValue(value + deltaY * wheelSpeed);
  36. };
  37. img.onclick = (e) => {
  38. const { layerX } = e;
  39. console.log(e, layerX);
  40. if (layerX > img.width / 2) this.setValue(value + step);
  41. else this.setValue(value - step);
  42. };
  43. this.setValue(value);
  44. };
  45. let a, b, c;
  46. function setRGB() {
  47. a = red.getValue();
  48. b = green.getValue();
  49. c = blue.getValue();
  50. let rgbDone = (div.style.background = `rgb(${a}, ${b}, ${c})`);
  51. return console.log(rgbDone);
  52. };
  53. const red = new Control(colorbox, { min: 0, max: 255 });
  54. red.onchange = setRGB;
  55. const green = new Control(colorbox, { min: 0, max: 255 });
  56. green.onchange = setRGB;
  57. const blue = new Control(colorbox, { min: 0, max: 255 });
  58. blue.onchange = setRGB;
  59. const volumeControl = new Control(colorbox, { value: 50 });
  60. volumeControl.onchange = (value) => {
  61. audio.volume = value / 100;
  62. console.log("ON CHANGE", value);
  63. };
  64. const audio = document.createElement("audio");
  65. audio.setAttribute("controls", "");
  66. audio.src = "Рингтон Доброго Вечора Ми З України - Probass X Hardi - mp36ka_net.mp3"; // путь к файлу могу не правильно указать, путаюсь
  67. audio.style.marginLeft = "200px";
  68. document.body.append(audio);
  69. const div = document.createElement("div");
  70. div.style.width = "725px";
  71. div.style.height = "800px";
  72. div.style.position = "relative";
  73. div.style.bottom = "800px"
  74. div.style.zIndex = "-1"
  75. document.body.append(div);