[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.30,0:00:03.73,Default,,0000,0000,0000,,Một tính năng hay của JS là Dialogue: 0,0:00:03.73,0:00:07.03,Default,,0000,0000,0000,,tạo hình ảnh động. Dialogue: 0,0:00:07.03,0:00:09.33,Default,,0000,0000,0000,,Nhưng mà trước khi đụng đến cái đó, tôi muốn đảm bảo là Dialogue: 0,0:00:09.33,0:00:11.83,Default,,0000,0000,0000,,bạn hiểu về 1 global variable (biến toàn cục) này nữa, Dialogue: 0,0:00:11.83,0:00:16.83,Default,,0000,0000,0000,,biến này tồn tại trên mọi web page, gọi là window variable. Dialogue: 0,0:00:17.08,0:00:21.31,Default,,0000,0000,0000,,Tôi sẽ console.log biến đó và bạn cũng có thể dừng video, Dialogue: 0,0:00:21.31,0:00:24.60,Default,,0000,0000,0000,,vào dev tools xem trong biến đó có những gì. Dialogue: 0,0:00:27.08,0:00:28.23,Default,,0000,0000,0000,,Bạn thấy chưa? Dialogue: 0,0:00:28.23,0:00:29.73,Default,,0000,0000,0000,,Nó to thật đấy. Dialogue: 0,0:00:29.73,0:00:33.81,Default,,0000,0000,0000,,Có nhiều thông tin đến choáng ngợp. Dialogue: 0,0:00:33.81,0:00:35.60,Default,,0000,0000,0000,,Để bớt choáng thì tôi Dialogue: 0,0:00:35.60,0:00:37.57,Default,,0000,0000,0000,,sẽ cho bạn biết một số thuộc tính Dialogue: 0,0:00:37.57,0:00:40.41,Default,,0000,0000,0000,,và hàm mà bạn sẽ thường dùng đến trong biến đó. Dialogue: 0,0:00:40.41,0:00:44.13,Default,,0000,0000,0000,,Có window.location, tức là Dialogue: 0,0:00:44.13,0:00:47.21,Default,,0000,0000,0000,,thông tin về URL của trang web. Dialogue: 0,0:00:48.46,0:00:51.71,Default,,0000,0000,0000,,Tôi sẽ viết cái đó luôn ra trang này Dialogue: 0,0:00:51.71,0:00:54.66,Default,,0000,0000,0000,,để bạn đỡ phải dừng video liên tục. Dialogue: 0,0:00:54.66,0:00:57.00,Default,,0000,0000,0000,,Vậy là có textContent, rồi ta chỉ Dialogue: 0,0:00:57.00,0:01:02.00,Default,,0000,0000,0000,,"The URL of this page is " + window.location, Dialogue: 0,0:01:03.46,0:01:04.76,Default,,0000,0000,0000,,nhưng mà cái này là một đối tượng, nên Dialogue: 0,0:01:04.76,0:01:08.59,Default,,0000,0000,0000,,ta sẽ phải đi vào trong đối tượng đấy để tìm thuộc tính .href. Dialogue: 0,0:01:08.59,0:01:10.77,Default,,0000,0000,0000,,Thế là xong. Đây chính là URL của Dialogue: 0,0:01:10.77,0:01:13.52,Default,,0000,0000,0000,,trang web iframed này. Dialogue: 0,0:01:14.80,0:01:18.20,Default,,0000,0000,0000,,Một thuộc tính khác là window.navigator.userAgent, Dialogue: 0,0:01:18.20,0:01:21.86,Default,,0000,0000,0000,,tức là thông tin về trình duyệt Dialogue: 0,0:01:21.86,0:01:25.55,Default,,0000,0000,0000,,của dười dùng, gõ... Dialogue: 0,0:01:25.55,0:01:28.14,Default,,0000,0000,0000,,"The user agent is " Dialogue: 0,0:01:28.14,0:01:31.96,Default,,0000,0000,0000,,+ window.navigator.userAgent. Dialogue: 0,0:01:33.39,0:01:36.14,Default,,0000,0000,0000,,Cái string về user agent này sẽ Dialogue: 0,0:01:36.14,0:01:38.81,Default,,0000,0000,0000,,trông khá là lộn xộn, Dialogue: 0,0:01:38.81,0:01:42.13,Default,,0000,0000,0000,,vì nó không phải để cho người đọc, Dialogue: 0,0:01:42.13,0:01:43.68,Default,,0000,0000,0000,,và cũng khá là loạn Dialogue: 0,0:01:43.68,0:01:46.20,Default,,0000,0000,0000,,vì vốn người ta quen dặt nó thế. Dialogue: 0,0:01:46.20,0:01:49.33,Default,,0000,0000,0000,,Vậy nên khi lập trình web thì người ta sẽ dùng các thư viện có sẵn Dialogue: 0,0:01:49.33,0:01:51.97,Default,,0000,0000,0000,,để giải mã thông tin trong string này Dialogue: 0,0:01:51.97,0:01:55.10,Default,,0000,0000,0000,,xem trình duyệt và phần mềm hệ thống của người dùng là gì, đại loại thế. Dialogue: 0,0:01:55.10,0:01:57.37,Default,,0000,0000,0000,,Vì string này tự nó khó hiểu lắm. Dialogue: 0,0:01:59.14,0:02:00.71,Default,,0000,0000,0000,,Giờ đến một cái khác dễ hiểu hơn. Dialogue: 0,0:02:00.73,0:02:05.22,Default,,0000,0000,0000,,Có window.outerWidth và window.outerHeight. Dialogue: 0,0:02:05.22,0:02:08.48,Default,,0000,0000,0000,,Ví dụ, viết Dialogue: 0,0:02:10.20,0:02:15.20,Default,,0000,0000,0000,,"This webpage is " + window.outerWidth Dialogue: 0,0:02:15.43,0:02:17.51,Default,,0000,0000,0000,,ta hiện chiều rộng trước, Dialogue: 0,0:02:17.51,0:02:21.13,Default,,0000,0000,0000,,+ " by " + window.outerHeight. Dialogue: 0,0:02:21.13,0:02:24.20,Default,,0000,0000,0000,,Với tôi thì kết quả là 1280 by 715, Dialogue: 0,0:02:24.20,0:02:25.86,Default,,0000,0000,0000,,nhưng với bạn thì chắc sẽ là số khác, Dialogue: 0,0:02:25.86,0:02:28.97,Default,,0000,0000,0000,,tuỳ theo kích thước mà bạn đang xem Dialogue: 0,0:02:28.97,0:02:30.82,Default,,0000,0000,0000,,video này. Dialogue: 0,0:02:31.90,0:02:35.50,Default,,0000,0000,0000,,Giờ tôi sẽ cho bạn thấy một cái hay nữa. Dialogue: 0,0:02:35.50,0:02:40.35,Default,,0000,0000,0000,,Tôi sẽ xoá chữ window trong code này đi. Dialogue: 0,0:02:41.53,0:02:45.33,Default,,0000,0000,0000,,Và bạn thấy là code vẫn Dialogue: 0,0:02:45.33,0:02:49.93,Default,,0000,0000,0000,,chạy bình thường, là vì 'window' là Dialogue: 0,0:02:49.93,0:02:52.90,Default,,0000,0000,0000,,biến toàn cục mặc định trên trang web. Dialogue: 0,0:02:52.90,0:02:56.44,Default,,0000,0000,0000,,Khi trình duyệt tìm kiếm biến mà bạn muốn dùng, Dialogue: 0,0:02:56.44,0:03:00.10,Default,,0000,0000,0000,,nó sẽ tìm ở trong đối tượng window, Dialogue: 0,0:03:00.10,0:03:03.17,Default,,0000,0000,0000,,vì khi bạn tạo một biến toàn cục mới, Dialogue: 0,0:03:03.17,0:03:07.83,Default,,0000,0000,0000,,thì đối tượng window sẽ lưu biến đó làm thuộc tính của mình. Dialogue: 0,0:03:07.83,0:03:09.94,Default,,0000,0000,0000,,tức là bạn không nên tự tạo Dialogue: 0,0:03:09.94,0:03:13.20,Default,,0000,0000,0000,,biến có tên outerWidth hay outerHeight, Dialogue: 0,0:03:13.20,0:03:14.97,Default,,0000,0000,0000,,vì những biến tự tạo đó sẽ đè lên Dialogue: 0,0:03:14.97,0:03:18.10,Default,,0000,0000,0000,,các biến mặc định window.outerWidth và window.outerHeight. Dialogue: 0,0:03:18.10,0:03:20.60,Default,,0000,0000,0000,,Thường thì bạn nên không tạo biến toàn cục nào cả Dialogue: 0,0:03:20.60,0:03:23.47,Default,,0000,0000,0000,,vì chúng rất dễ đụng lẫn nhau Dialogue: 0,0:03:23.47,0:03:27.50,Default,,0000,0000,0000,,hoặc đụng vào các biến có sẵn trong window. Dialogue: 0,0:03:27.50,0:03:31.64,Default,,0000,0000,0000,,Để an toàn hơn, bạn cũng có thể tạo tiền tố cho các biến toàn cục, Dialogue: 0,0:03:31.64,0:03:35.83,Default,,0000,0000,0000,,ví dụ như trong Khan Academy, ta viết thêm KA_ Dialogue: 0,0:03:35.83,0:03:38.62,Default,,0000,0000,0000,,lên đằng trường tất cả các biến toàn cục, để khỏi lẫn. Dialogue: 0,0:03:40.00,0:03:42.13,Default,,0000,0000,0000,,Vậy là xong về đối tượng window. Dialogue: 0,0:03:42.13,0:03:44.19,Default,,0000,0000,0000,,Tiếp theo ta sẽ học cách dùng Dialogue: 0,0:03:44.19,0:00:00.00,Default,,0000,0000,0000,,2 hàm trong đó để tạo hình ảnh động.