Advertisement
avr39ripe

jsColorPicker

Apr 8th, 2021
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Study</title>
  6.     <style>
  7.         html,
  8.         body {
  9.             display: flex;
  10.             width: 95%;
  11.             height: 95%;
  12.             min-width: 810px;
  13.             min-height: 410px;
  14.             align-items: center;
  15.             justify-content: center;
  16.             margin: 8px 15px;
  17.         }
  18.  
  19.         .centered {
  20.             display: flex;
  21.             flex-direction: row;
  22.             align-items: center;
  23.             justify-content: center;
  24.             padding: 50px;
  25.         }
  26.  
  27.         #main {
  28.             width: 100%;
  29.             height: 50%;
  30.             flex-direction: column;
  31.         }
  32.  
  33.         #rgbContainer {
  34.             width: 100%;
  35.             height: 50%;
  36.             background-color: grey;
  37.             border: 2px solid black;
  38.         }
  39.  
  40.         .colorBlock {
  41.             display: flex;
  42.             flex-direction: column;
  43.             align-items: center;
  44.             justify-content: center;
  45.             width: 30%;
  46.             height: 95%;
  47.             margin: auto;
  48.             border: 4px solid white;
  49.         }
  50.  
  51.         #red {
  52.             background-color: red;
  53.         }
  54.  
  55.         #green {
  56.             background-color: green;
  57.         }
  58.  
  59.         #blue {
  60.             background-color: blue;
  61.         }
  62.  
  63.     </style>
  64. </head>
  65. <body>
  66.     <div id="main" class="centered">
  67.         <div id="rgbContainer" class="centered" tabindex="1">
  68.             <div id="red" class="colorBlock">
  69.                 <input id="inRed" type="number" min="0" max="255" step="1" value="0">
  70.             </div>
  71.             <div id="green" class="colorBlock">
  72.                 <input id="inGreen" type="number" min="0" max="255" step="1" value="0">
  73.             </div>
  74.             <div id="blue" class="colorBlock">
  75.                 <input id="inBlue" type="number" min="0" max="255" step="1" value="0">
  76.             </div>
  77.         </div>
  78.     </div>
  79.     <script>
  80.         'use strict'
  81.         class ColorPicker {
  82.             constructor() {
  83.                 this._red = 0;
  84.                 this._green = 0;
  85.                 this._blue = 0;
  86.                 this._active = 'none';
  87.             }
  88.  
  89.             static deltaQ = 10;
  90.             static colorElements = ['red', 'green', 'blue'];
  91.             static inElements = ['inRed', 'inGreen', 'inBlue'];
  92.  
  93.             get red() { return this._red; }
  94.             get green() { return this._green; }
  95.             get blue() { return this._blue; }
  96.             get active() { return this._active; }
  97.  
  98.             set red(val) { this._red = Math.min(Math.max(0, val), 255); this._updateColor(); this._updateNumbers();}
  99.             set green(val) { this._green = Math.min(Math.max(0, val), 255); this._updateColor(); this._updateNumbers();}
  100.             set blue(val) { this._blue = Math.min(Math.max(0, val), 255); this._updateColor(); this._updateNumbers();}
  101.             set active(val) { this._active = val; this._setActive(this._active); }
  102.  
  103.             _updateColor() {
  104.                 const rgbContainer = document.getElementById('rgbContainer');
  105.                 rgbContainer.style.backgroundColor = `rgb(${this.red}, ${this.green}, ${this.blue})`;
  106.             }
  107.  
  108.             _updateNumbers() {
  109.                 document.getElementById('inRed').value = this.red;
  110.                 document.getElementById('inGreen').value = this.green;
  111.                 document.getElementById('inBlue').value = this.blue;
  112.             }
  113.  
  114.             _setActive(color) {
  115.                 for (let colorId of ColorPicker.colorElements) {
  116.                     if (colorId != color) { document.getElementById(colorId).style.borderStyle = 'solid'; };
  117.                     if (colorId == color) { document.getElementById(colorId).style.borderStyle = 'dotted'; };
  118.                 }
  119.             };
  120.  
  121.             _cycleActive(dir = 1) {
  122.                 if (this.active == 'none') { this.active = 'red'; return; }
  123.                 let activeId = ColorPicker.colorElements.indexOf(this.active);
  124.                 activeId += dir;
  125.                 if (activeId > 2) { activeId = 0; }
  126.                 if (activeId < 0) { activeId = 2; }
  127.                 this.active = ColorPicker.colorElements[activeId];
  128.             }
  129.  
  130.             _addActiveColor(val) {
  131.                 let color = this.active == 'none' ? 'red' : this.active;
  132.                 this[color] += val;
  133.             }
  134.  
  135.             handleEvent(event) {
  136.                 this[`on${event.type[0].toUpperCase()}${event.type.slice(1)}`](event);
  137.             }
  138.  
  139.             onClick(event) {
  140.                 this._cycleActive();
  141.             }
  142.  
  143.             onKeydown(event) {
  144.                 if (event.target.id == 'rgbContainer') {
  145.                     if (event.code == 'ArrowRight') { this._cycleActive(1); }
  146.                     if (event.code == 'ArrowLeft') { this._cycleActive(-1); }
  147.                     if (event.code == 'ArrowUp') { this._addActiveColor(10); }
  148.                     if (event.code == 'ArrowDown') { this._addActiveColor(-10); }
  149.                 }
  150.             }
  151.  
  152.             onChange(event) {
  153.                 const inColor = event.target.id;
  154.                 if (ColorPicker.inElements.includes(inColor)) {
  155.                     let color = inColor.slice(2).toLowerCase();
  156.                     this[color] = parseInt(event.target.value);
  157.                 }
  158.             }
  159.  
  160.             onWheel(event) {
  161.                 const color = event.target.id;
  162.                 if (ColorPicker.colorElements.includes(color)) {
  163.                     event.preventDefault();
  164.                     this[color] += (event.deltaY > 0 ? -ColorPicker.deltaQ : ColorPicker.deltaQ);
  165.                 }
  166.  
  167.                 if (color == 'rgbContainer') {
  168.                     event.preventDefault();
  169.  
  170.                     for (let colorId of ColorPicker.colorElements) {
  171.                         this[colorId] += (event.deltaY > 0 ? -ColorPicker.deltaQ : ColorPicker.deltaQ);
  172.                     }
  173.                 }
  174.             }
  175.  
  176.             onMouseover(event) {
  177.                 const classList = event.target.classList;
  178.                 if (classList.contains('colorBlock')) {
  179.                     this.active = event.target.id;
  180.                 }
  181.             }
  182.  
  183.             onMouseout(event) {
  184.                 const classList = event.target.classList;
  185.                 if (classList.contains('colorBlock')) {
  186.                     this.active = 'none';
  187.                 }
  188.             }
  189.         }
  190.                        
  191.         const rgbContainer = document.getElementById('rgbContainer');
  192.         let colorPicker = new ColorPicker();
  193.         rgbContainer.addEventListener('wheel', colorPicker);
  194.         rgbContainer.addEventListener('click', colorPicker);
  195.         rgbContainer.addEventListener('change', colorPicker);
  196.         rgbContainer.addEventListener('keydown', colorPicker);
  197.         rgbContainer.addEventListener('mouseover', colorPicker);
  198.         rgbContainer.addEventListener('mouseout', colorPicker);
  199.  
  200.  
  201.         //const red = document.getElementById('red');
  202.         //const green = document.getElementById('green');
  203.         //const blue = document.getElementById('blue');
  204.  
  205.         //rgbContainer.addEventListener('mouseenter', (event) => { console.log(`Mouseenter -> ${event.target.id}`) });
  206.         //rgbContainer.addEventListener('mouseleave', (event) => { console.log(`Mouseleave -> ${event.target.id}`) });
  207.         //rgbContainer.addEventListener('mouseover', (event) => { console.log(`Mouseover -> ${event.target.id}`) });
  208.         //rgbContainer.addEventListener('mouseout', (event) => { console.log(`Mouseout -> ${event.target.id}`) });
  209.  
  210.         //red.addEventListener('mouseenter', (event) => { console.log(`Mouseenter -> ${event.target.id}`) });
  211.         //red.addEventListener('mouseleave', (event) => { console.log(`Mouseleave -> ${event.target.id}`) });
  212.         //red.addEventListener('mouseover', (event) => { console.log(`Mouseover -> ${event.target.id}`) });
  213.         //red.addEventListener('mouseout', (event) => { console.log(`Mouseout -> ${event.target.id}`) });
  214.  
  215.     </script>
  216. </body>
  217. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement