Chuyển đến nội dung chính

Canvas: Giới thiệu về Canvas - Day 1

Ngày 11-11 là ngày lễ độc thân, người người săn sale. Còn mình thì dùng tí thời gian học làm sửu nhi. Học một tí về Canvas để vẽ trái tim, đu theo mạng xã hội. Lúc đầu mình tưởng dễ nhưng không dễ tí nào. Copy code cũng cần có fundamental nên mình sẽ học 1 tí để tùy biến code có sẵn.

HTML5 Canvas là gì?

Canvas là một phần tử của HTML5, cho phép thực hiện lập trình kết xuất đồ họa các đối tượng hai chiều trên trang web. Canvas chiếm một khu vực trong trang web với chiều rộng và chiều cao định trước. Sau đó sử dụng Javascript có thể truy cập vào khu vực này để vẽ thông qua một tập các hàm đồ họa tương tự như các API 2D khác.

Canvas là một vùng hình chữ nhật trên trang HTML. Theo mặc định, canvas không có đường viền và không có nội dung.

Setup project

Cơ bản một website sẽ gồm có 3 thành phần chính: HTML, CSS, và javascript.

📁 heart
    └──index.html
    └──📂 lib
        ├──style.css
        ├──script.js

Ở file index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Nhat ky hoc tap</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="lib/style.css" />
  </head>
  <body>
    <canvas id="canvas1"> </canvas>
    <script src="lib/script.js"></script>
  </body>
</html>
File style.css

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    overflow: hidden;
  }
  
#canvas1{
    position: absolute;
    background: black;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
}
File script.js
var canvas = document.getElementById('canvas1');
if (canvas.getContext){
  var ctx = canvas.getContext('2d');
  // draw something
} else {
  alert("This browser doesn't support canvas."
}

2D Context

2D Context cung cấp cho bạn vẽ hình 2D đơn giản như path, rectangle, và arcs. 

Tọa độ 2D context là từ góc trên bên trái của phần tử canvas với điểm (0,0) như hình bên dưới

 

Kích thước mặc định của Canvas: width = 300, height = 150

Giả sử bạn định nghĩa 1 canvas với width = 200 và height = 100, như vậy canvas có tất cả 20,000 pixel. Và bạn có thể tăng gấp đôi kích thước của canvas lên nhưng lượng pixel mà bạn thao tác với canvas vẫn chỉ là 20,000. 

Dựa vào ví dụ trên, chúng ta thay đổi javascript như sau:
(() => {
    const canvas = document.querySelector('#canvas1');
    if (!canvas.getContext) {
        return;
    }
    // get the context
    const ctx = canvas.getContext('2d');

    // set fill and stroke styles
    ctx.fillStyle = '#F0DB4F';
    ctx.strokeStyle = 'red';

    // draw a rectangle with fill and stroke
    ctx.fillRect(50, 50, 150, 100);
    ctx.strokeRect(50, 50, 150, 100);

})();

Kết quả cho thấy hình chữ nhật bị mờ. 

Bạn mở comment dòng canvas.widthcanvas.height, lúc này bạn sẽ thấy hình chữ nhật không bị bể. 

Khi bạn thay đổi kích thước trình duyệt so với kích thước lúc ban đầu, bạn cần thêm event resize để render lại canvas.

Chúng ta sẽ viết 2 hàm như sau:

  • window.addEventListener('resize',function(){});
  • draw();
(() => {
    const draw = (canvas, ctx) => {
        // set fill and stroke styles
        ctx.fillStyle = '#F0DB4F';
        ctx.strokeStyle = 'red';
        // draw a rectangle with fill and stroke
        ctx.fillRect(50, 50, 150, 100);
        ctx.strokeRect(50, 50, 150, 100);
        console.log("width: " + canvas.width + " - height: " + canvas.height);
    }

    const canvas = document.querySelector('#canvas1');
    if (!canvas.getContext) {
        return;
    }
    // get the context
    const ctx = canvas.getContext('2d');

    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    draw(canvas, ctx);

    window.addEventListener('resize',function(){
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        draw(canvas, ctx);
    });
})();

Tham khảo

https://yinyangit.wordpress.com/2012/05/16/html5-canvas-thay-doi-kich-thuoc-canvas-theo-trinh-duyet/

https://www.javascripttutorial.net/web-apis/javascript-canvas/

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.