Menu w html5 canvas

W tutorialu pokażę jak stworzyć ciekawe menu wykorzystując html5 canvas (menu html5 canvas - demo). Na początek przygotujmy dokument html. W sekcji head załączamy bibliotekę jquery, skrypt menu_shape.js, w którym umieścimy kod skryptu odpowiedzialnego za działanie menu oraz trochę stylów css. W sekcji body umieszczamy element canvas oraz listę ul z odnośnikami do poszczególnych sekcji menu.

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Html5 canvas menu - demo</title>
  6. <link href="css/menu.css" rel="stylesheet" type="text/css" />
  7. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
  8. <script type="text/javascript" src="js/menu_shape.js"></script>
  9. <style type="text/css">
  10. body {
  11. background:url("bg2.jpg") no-repeat top center;
  12. }
  13. div.container {
  14. position:relative;
  15. margin:50px auto 0 auto;
  16. width:800px;
  17. }
  18. #menu_shape {
  19. position:absolute;
  20. top:0;
  21. padding:0;
  22. margin:17px 0 0 20px;
  23. width:100%;
  24. }
  25. #menu_shape li {
  26. float:left;
  27. list-style:none;
  28. padding:0;
  29. margin:0;
  30. margin-right:10px;
  31. }
  32. #menu_shape li a {
  33. text-decoration:none;
  34. font:14px Verdana, Arial, Helvetica, sans-serif;
  35. color:white;
  36. font-weight:bold;
  37. width:180px;
  38. float:left;
  39. text-align:center;
  40. }
  41. </style>
  42. </head>
  43. <body>
  44. <div class="container">
  45. <canvas id="canvas" width="800px" height="100px"></canvas>
  46. <ul id="menu_shape">
  47. <li><a href="#">HOME</a></li>
  48. <li><a href="#">PORTFOLIO</a></li>
  49. <li><a href="#">CONTACT</a></li>
  50. </ul>
  51. </div>
  52. </body>
  53. </html>
Menu html5 canvas Teraz będziemy stopniowo uzupełniać plik javascript. Najpierw łapiemy element canvas oraz jego context. Ustalamy również startowe wartości pomocniczych zmiennych (kappa - poziom zaokręglenia elipsy, up - zmienna do sprawdzania, w którą stronę idzie animacja, all - zlicza liczę elementów li w menu).
  1. $(document).ready(function() {
  2. var canvas = document.getElementById("canvas"), context = canvas.getContext("2d");
  3. var kappa = 0.75;
  4. var up = true, interval, all = $('#menu_shape li').length;
  5. });
Dopiszmy funkcję rysującą elipsę i narysujmy trzy elipsy odpowiadające li w naszym menu.
  1. function drawEllipse(context, x, y, w, h, number_ellipse,kappa) {
  2. ox = (w / 2) * kappa,
  3. oy = (h / 2) * kappa,
  4. x = x+((number_ellipse-1)*190),//odpowiednie przesuniecie elipsy aby pasowala do kolejnego li
  5. xe = x + w,
  6. ye = y + h,
  7. xm = x + w / 2,
  8. ym = y + h / 2;
  9. context.fillStyle = 'rgba(112,209,215,0.3)';
  10. context.strokeStyle = 'rgba(112,209,215,0.6)';
  11. context.beginPath();
  12. context.moveTo(x, ym);
  13. context.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
  14. context.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
  15. context.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
  16. context.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
  17. context.closePath();
  18. context.stroke();
  19. context.fill();
  20. }
  21. drawEllipse(context, 20, 5, 180, 40, 1, kappa);
  22. drawEllipse(context, 20, 5, 180, 40, 2, kappa);
  23. drawEllipse(context, 20, 5, 180, 40, 3, kappa);
Wprowadzimy teraz obsługę zdarzenia hover na elemencie menu. Po najechaniu wskaźnikiem myszy na li uruchomi się funkcja anim_menu, po zjechaniu stop_anim_menu.
  1. $('#menu_shape li').hover(function() {
  2. anim_menu(this);
  3. },
  4. function() {
  5. stop_anim_menu(this);
  6. });
Pozostała nam już tylko implementacja funkcji animujących.
  1. function anim_menu(element)
  2. {
  3. var ind = $(element).index();
  4. interval = window.setInterval(function() {
  5. if(kappa>=1.4)
  6. {
  7. up = false;
  8. }
  9. if(kappa<=0.7)
  10. {
  11. up = true;
  12. }
  13. if(up)
  14. {
  15. kappa+=0.1;
  16. }
  17. if(!up)
  18. {
  19. kappa-=0.1;
  20. }
  21. context.clearRect(0,0,canvas.width,canvas.height);
  22. //rysujemy przekształconą elipsę
  23. drawEllipse(context, 20, 5, 180, 40, ind+1, kappa);
  24. //poniższa petla ustawia pozostale elipsy w swoich pozycjach
  25. for(var i=1; i <= all;i++)
  26. {
  27. if(i != ind+1)
  28. {
  29. drawEllipse(context, 20, 5, 180, 40, i, 0.75);
  30. }
  31. }
  32. },
  33. 100);
  34. }
  35. function stop_anim_menu(element)
  36. {
  37. window.clearInterval(interval);
  38. context.clearRect(0,0,canvas.width,canvas.height);
  39. for(var i=1; i <= all;i++)
  40. {
  41. drawEllipse(context, 20, 5, 180, 40, i, 0.75);
  42. }
  43. }
Animacja polega na przekształcaniu elipsy. Po zjechaniu wskaźnika myszy z li przerywamy animację (clearInterval) i ustawiamy nasze elipsy w wyjściowej pozycji.

Strona korzysta z plików cookies

Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.
OK
Więcej
Free cookie consent by cookie-script.com