Advertisement
asternauta

Canvas Zegar (naprawionoulepszony)

Jan 7th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 5.06 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <title></title>    
  5.         <meta charset="UTF-8"/>
  6.     </head>
  7.     <body>     
  8.         <canvas id="rys1" width="500" height="500" style="border: 1px solid"></canvas><br>
  9.         <canvas id="rys2" width="500" height="120" style="border: 1px solid"></canvas>     
  10.         <!--
  11.         <br><br>       
  12.         <p>Podziękowania dla tej strony (<a href="https://www.scriptol.com/html5/canvas/circle.php" target="_blank">https://www.scriptol.com/html5/canvas/circle.php</a>) za olśnienie z wycinkiem :D
  13.            
  14.         TODO:
  15.             - wsio w canvasie (rysunki, zegar, legenda kolorów)
  16.             - możliwość zmiany kolorów przez input type="color"  
  17.            
  18.             NIE KASOWAĆ TEGO KOMENTARZA!!! (dotyczy autora, do odwołania)
  19.         -->
  20.         <script>
  21.             var konce_lekcji = [700, 750, 840, 930, 1015, 1115, 1205, 1255, 1345, 1435, 1525];         
  22.             const czas_lekcji = 45;
  23.             var nr_kon_lekc = -1;
  24.            
  25.             function DodajZeroWiodace(l)
  26.             {
  27.                 var w = l;
  28.                 if(l < 10) w = "0" + l;
  29.                 return w;
  30.             }
  31.            
  32.             function MinutyWyraz(m)
  33.             {
  34.                 var wyr = "minut";             
  35.                 var dzies = Math.floor(m % 100 / 10);
  36.                 var jedn = m % 10;
  37.                
  38.                 if (m == 1) wyr += "a";
  39.                 else if ((dzies == 0 || (dzies >= 2 && dzies <= 9)) && (jedn >= 2 && jedn <= 4))
  40.                     wyr += "y";
  41.                
  42.                 return wyr;
  43.             }
  44.            
  45.             function ZnajdzNrTabKoncaLekcji(d)
  46.             {
  47.                 var t_czas = "" + d.getHours() + DodajZeroWiodace(d.getMinutes()),
  48.                     l_czas = parseInt(t_czas),
  49.                     i = 0,
  50.                     n = -1;
  51.                
  52.                 while (n == -1 && i < konce_lekcji.length)
  53.                 {              
  54.                     if (l_czas <= konce_lekcji[i]) n = i;          
  55.                     ++i;
  56.                 }
  57.                 return n;
  58.             }
  59.            
  60.             function ObliczCzasDoKonca(teraz, nr)
  61.             {
  62.                 var d = new Date();            
  63.                 var godz = Math.floor(konce_lekcji[nr] / 100);             
  64.                 var min = konce_lekcji[nr] - godz * 100;
  65.                
  66.                 d.setHours(godz);
  67.                 d.setMinutes(min);
  68.                 d.setSeconds(d.getSeconds());
  69.                
  70.                 var roznica = d - teraz;
  71.                 var minuty = Math.round(roznica / 60000);      
  72.                
  73.                 return minuty;
  74.             }      
  75.            
  76.             function RysujKolo(ctx, x, y, r, wypelnienie, wsp_pi = 2, wycinek = false)
  77.             {
  78.                 ctx.beginPath();
  79.                 ctx.arc(x,y,r,0,wsp_pi*Math.PI);
  80.                
  81.                 if (wycinek) ctx.lineTo(x,y);
  82.                
  83.                 if (wypelnienie)
  84.                 {
  85.                     ctx.fillStyle = wypelnienie;
  86.                     ctx.fill();
  87.                 }
  88.                 else ctx.stroke();
  89.                    
  90.                 if (wycinek) ctx.closePath();
  91.             }          
  92.            
  93.             const kolo_kolor = "red",
  94.                 kolo_kolor_czas = "green",
  95.                 prost_kolor = "green",
  96.                 prost_kolor_czas = "#d1c134",          
  97.                 tekst_kolor = "black",
  98.                 tekst_czcionka = "Verdana",
  99.                 tekst_prop = 0.45;
  100.  
  101.             function RysujWKole(kontekst, x, y, szer, wys, minuty, czas_lekcji)
  102.             {
  103.                 var kolo_x = x + (szer / 2),
  104.                     kolo_y = x + (wys / 2),
  105.                     kolo_r,
  106.                     wspolczynnik_pi = (minuty / czas_lekcji) * 2;              
  107.                
  108.                 if (szer <= wys)    kolo_r = (szer / 2);
  109.                 else                kolo_r = (wys / 2);
  110.                
  111.                 kolo_r--;
  112.                
  113.                 RysujKolo(kontekst, kolo_x, kolo_y, kolo_r, kolo_kolor);
  114.                 RysujKolo(kontekst, kolo_x, kolo_y, kolo_r, kolo_kolor_czas, wspolczynnik_pi, true);
  115.             }
  116.            
  117.             function RysujWProstokacie(kontekst, x, y, szer, wys, minuty, czas_lekcji)
  118.             {
  119.                 const napis_wys = wys - 1//wysokość tekstu (położenie Y)
  120.                       napis_czas_lekc = czas_lekcji+ "", //czas lekcji przekonwertowany na napis
  121.                       napis_czas_do_konca = minuty + " " + MinutyWyraz(minuty), //minuty do końca przekonwertowane na napis wraz z dopiskiem minut[a/y]
  122.                       prost_szer_czas = szer * (minuty / czas_lekcji); //szerokość prostokąta czasu do końca lekcji                
  123.                
  124.                 kontekst.fillStyle = prost_kolor;
  125.                 kontekst.fillRect(x, y, szer, wys);
  126.                
  127.                 kontekst.fillStyle = prost_kolor_czas;
  128.                 kontekst.fillRect(x, y, prost_szer_czas, wys);
  129.                
  130.                 kontekst.fillStyle = tekst_kolor;
  131.                 kontekst.font = (wys * tekst_prop) + "px " + tekst_czcionka;
  132.                
  133.                 const napis_czas_do_konca_szer = kontekst.measureText(napis_czas_do_konca).width, //szerokość w pikselach napisu z czasem do końca
  134.                       napis_czas_do_konca_x = x + (szer - napis_czas_do_konca_szer) / 2; //współrzędna X dla ww. napisu (wyśrodkowane względem całej szerokości)
  135.                       napis_czas_lekc_szer = kontekst.measureText(napis_czas_lekc).width; //szerokość w pikselach napisu z czasem lekcji             
  136.                       napis_czas_lekc_x = x + (szer - napis_czas_lekc_szer); //współrzędna X dla ww. napisu (po prawej stronie prostokąta)
  137.                
  138.                 kontekst.fillText("0", x, napis_wys);              
  139.                 kontekst.fillText(napis_czas_do_konca, napis_czas_do_konca_x, napis_wys);              
  140.                 kontekst.fillText(czas_lekcji+"", napis_czas_lekc_x, napis_wys);
  141.             }
  142.            
  143.             function Rysuj()
  144.             {  
  145.                 var rys = [document.getElementById("rys1"), document.getElementById("rys2")];
  146.                 var teraz = new Date();
  147.                 var minuty = ObliczCzasDoKonca(teraz, nr_kon_lekc);
  148.            
  149.                 RysujWKole(rys[0].getContext("2d"), 0, 0, rys[0].width, rys[0].height, minuty, czas_lekcji);               
  150.                 RysujWProstokacie(rys[1].getContext("2d"), 0, 0, rys[1].width, rys[1].height, minuty, czas_lekcji);
  151.             }
  152.            
  153.             MinutyWyraz(12);
  154.             nr_kon_lekc = ZnajdzNrTabKoncaLekcji(new Date());
  155.             setInterval(Rysuj,1000);
  156.         </script>
  157.     </body>
  158. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement