Trang chủ » Mã hóa » Cách xây dựng lịch Advent đơn giản trong JavaScript

    Cách xây dựng lịch Advent đơn giản trong JavaScript

    Mùa Vọng là khoảng thời gian chờ đợi và chuẩn bị cho Giáng sinh bắt đầu bốn Chủ nhật trước đêm Giáng sinh. Thời gian của Mùa Vọng theo truyền thống được đo bằng sự trợ giúp của Lịch Mùa Vọng hoặc Vòng hoa Mùa Vọng. Mặc dù bắt đầu Mùa Vọng không phải là một ngày cố định, Lịch Mùa Vọng thường bắt đầu vào ngày 1 tháng 12.

    Dựa trên phong tục địa phương, Lịch Advent có thể có các thiết kế khác nhau, nhưng thường xuyên nhất là chúng có dạng thẻ hình chữ nhật lớn với 24 cửa sổ hoặc cửa ra vào đánh dấu những ngày từ ngày 1 đến ngày 24 tháng 12. Những cánh cửa ẩn giấu thông điệp, bài thơ, lời cầu nguyện hoặc những bất ngờ nho nhỏ.

    Trong bài viết này tôi sẽ chỉ cho bạn cách tạo Lịch Mùa Vọng trong JavaScript hướng đối tượng. Vì nó được tạo bằng JavaScript vanilla, bạn có thể dễ dàng đặt mã vào trang web của riêng mình.

    • Bản giới thiệu
    • Tải xuống nguồn

    Thiết kế lịch JavaScript

    Lịch Mùa Vọng của chúng tôi sẽ có 24 cửa trên hình nền theo chủ đề Giáng sinh. Mỗi cánh cửa sẽ ẩn một trích dẫn liên quan đến Giáng sinh bật lên dưới dạng một thông báo cảnh báo khi người dùng nhấp vào cửa. Các cánh cửa vẫn đóng cho đến ngày nhất định đến, vì đó là trường hợp với Lịch Mùa Vọng ngoài đời thực; các cửa không thể được mở trước ngày đúng.

    Cửa đã được bật sẽ có viền và màu nền khác (màu trắng) so với cửa bị vô hiệu hóa (màu xanh lá cây). Chúng tôi sẽ sử dụng HTML5, CSS3 và JavaScript để chuẩn bị Lịch Mùa Vọng của chúng tôi trông giống như thế này:

    Bước 1 - Tạo cấu trúc & tài nguyên tệp

    Trước hết, chúng ta cần chọn một hình nền đẹp. Tôi đã chọn một cái có hướng dọc từ Pixabay, vì vậy lịch của tôi sẽ chứa 4 cột và 6 hàng.

    Nó là tốt nếu bạn thích một hướng cảnh quan. Chỉ cần thay đổi vị trí của các cửa trong mã JavaScript, như bạn sẽ có 6 cột và 4 hàng. Nếu bạn có hình ảnh của mình, hãy tạo một thư mục có tên / hình ảnh, và lưu nó.

    Đây sẽ là tài nguyên hình ảnh duy nhất của chúng tôi cho dự án này.

    Đối với các tệp JavaScript, hãy tạo một / script thư mục bên trong thư mục gốc của bạn. Đặt hai tệp văn bản trống vào đó và đặt tên cho chúng calendar.jsmessage.js. Lịch.js sẽ giữ chức năng, trong khi message.js sẽ chứa các mảng tin nhắn bật lên khi người dùng “mở ra” (bấm vào) cửa.

    Chúng tôi cũng sẽ cần một tệp HTML và CSS, vì vậy hãy tạo hai tệp trống trong thư mục gốc của bạn và đặt tên cho chúng index.htmlstyle.css.

    Khi bạn đã sẵn sàng, bạn có tài nguyên và cấu trúc tệp bạn sẽ cần để thực hiện dự án này và thư mục gốc của bạn trông giống như thế này:

    Bước 2 - Tạo HTML

    Mã HTML chúng tôi sử dụng khá đơn giản. Biểu định kiểu CSS được liên kết trong phần, trong khi hai tệp JavaScript được bao gồm ở dưới cùng của phần. Điều thứ hai là cần thiết, bởi vì nếu chúng ta đặt các tập lệnh vào phần, mã sẽ không được thực thi, vì nó sử dụng các yếu tố của trang HTML đã tải.

    Lịch Mùa Vọng được đặt bên trong

    thẻ ngữ nghĩa. Chúng tôi tải hình ảnh Giáng sinh như một Phần tử HTML và không phải là thuộc tính nền CSS, vì theo cách này chúng ta có thể dễ dàng truy cập nó như một phần tử của DOM.

    Bên dưới hình ảnh, chúng tôi đặt một danh sách không có thứ tự trống với “mạo hiểm” bộ chọn id sẽ được tạo bởi các tập lệnh. Nếu người dùng không bật JavaScript trong trình duyệt của họ, họ sẽ chỉ thấy một hình ảnh Giáng sinh đơn giản.

         Lịch Mùa Vọng       

    Lịch Mùa Vọng

      Bước 3 - Dân số “Tin nhắn” Mảng

      Chúng tôi cần 24 trích dẫn Giáng sinh để điền vào “tin nhắn” mảng. Tôi đã chọn của tôi từ GoodReads.

      Mở script / message.js tập tin; chúng tôi sẽ đặt các trích dẫn ở đây để tách chúng khỏi chức năng. Các tin nhắn mảng là một mảng bên trong một mảng, mỗi phần tử của mảng bên ngoài chứa một mảng khác có hai phần tử: một trích dẫn và tác giả của nó.

      Điền vào mảng với các trích dẫn yêu thích của bạn theo cú pháp sau:

       var message = [["Trích dẫn 1", "Tác giả 1"], ["Trích dẫn 2", "Tác giả 2"], đánh ["Trích dẫn 24", "Tác giả 24"]];

      Bước 4 - Thêm kiểu CSS cơ bản cho cửa ra vào

      Để tạo các kiểu CSS cần thiết cho các cánh cửa, chúng ta cần phải tưởng tượng ra thiết kế cuối cùng, vì chính các cánh cửa sẽ được tạo bằng JavaScript theo các bước sau.

      Chúng ta cần tạo 4 cột và 6 hàng hình chữ nhật theo đúng hướng. Đối với điều này, chúng tôi sẽ sử dụng vị trí: tương đốivị trí: tuyệt đối Quy tắc CSS. Vì vị trí chính xác sẽ thay đổi từng cửa, chúng tôi sẽ thêm hàng đầu, dưới cùng, trái, và đúng các thuộc tính trong JavaScript, trong CSS, chúng ta chỉ cần thêm một vị trí tương đối vào vùng chứa (danh sách không có thứ tự trong HTML) và các vị trí tuyệt đối cho các thành phần danh sách (chúng cũng sẽ được thêm vào trong JS).

      Điều quan trọng khác trong tệp biểu định kiểu là tạo một thiết kế khác cho người khuyết tật và trạng thái kích hoạt. Các .tàn tật bộ chọn sẽ được thêm vào bị vô hiệu hóa bởi JavaScript.

      Đối với Lịch demo của tôi, tôi đặt đường viền trắng và phông chữ màu trắng cho các cửa được bật với nền trắng trong suốt khi di chuột; và một đường viền màu xanh lá cây, và phông chữ, và một nền sáng màu trong suốt cho những người khuyết tật. Nếu bạn không thích thiết kế này, bạn có thể thay đổi màu sắc và kiểu dáng theo mong muốn của bạn.

      Đặt mã sau đây (hoặc quy tắc kiểu đã sửa đổi của bạn) vào style.css tập tin.

       ul # AdventuresDoors vị trí: tương đối; danh sách kiểu: không có; đệm: 0; lề: 0;  #adventDoors li vị trí: tuyệt đối;  #adventDoors li a color: #fff; chiều rộng: 100%; chiều cao: 100%; cỡ chữ: 24px; văn bản-align: trung tâm; hiển thị: flex; hướng flex: cột; justify-content: trung tâm; trang trí văn bản: không có; viền: 1px #fff solid;  #adventDoors li a: not (.disables): hover color: #fff; màu nền: trong suốt; màu nền: rgba (255,255,255,0,15);  #adventDoors li a.disables Border-color: # b6fe98; màu nền: rgba (196.254.171,0.15); màu: # b6fe98; con trỏ: mặc định; 

      Bước 5 - Tạo các biến toàn cầu

      Từ bước này, chúng tôi sẽ chỉ làm việc với script / calendar.js tập tin, vì vậy bây giờ hãy mở nó lên. Lịch Mùa Vọng của chúng tôi sẽ sử dụng hai biến toàn cầu.

      Các myCal biến giữ hình ảnh Lịch dưới dạng đối tượng JS. Hình ảnh đã được thêm vào index.html tập tin ở Bước 2. Chúng tôi sẽ đặt các cánh cửa vào hình ảnh này trong Bước 7. Chúng tôi chụp HTML liên quan yếu tố được đánh dấu bằng “đời phiêu lưu” định danh bằng cách sử dụng phương thức DOM getEuityById (). Các myCal biến sẽ là một đối tượng DOM HTMLImageE bổ sung.

      Các ngay hiện tại biến giữ ngày hiện tại để tập lệnh của chúng tôi có thể dễ dàng quyết định xem một cửa sẽ được bật hay tắt. Để tạo ngay hiện tại chúng tôi khởi tạo một đối tượng mới của lớp JavaScript ngày.

      Đặt đoạn mã sau vào đầu của bạn calendar.js tập tin.

       var myCal = document.getEuityById ("AdventuresCal"); var currentDate = ngày mới ();

      Bước 6 - Tạo “Cửa” Lớp học

      Vì chúng ta cần 24 cửa, cách đơn giản nhất để làm điều này là tạo ra một “Cửa” lớp, và sau đó khởi tạo nó 24 lần.

      Lớp cửa của chúng tôi có hai tham số, lịchngày. Cho lịch tham số chúng ta sẽ cần để vượt qua hình ảnh Giáng sinh sẽ hoạt động như nền. Cho ngày tham số chúng ta sẽ cần phải vượt qua ngày hiện tại của tháng 12 dưới dạng một số nguyên.

      Chúng ta sẽ chuyển các giá trị chính xác của các tham số trong bước cuối cùng (Bước 8), trong quá trình khởi tạo của 24 đối tượng Cửa.

      Chúng ta sẽ tạo 5 thuộc tính và 1 phương thức cho lớp Door. Trong Bước này, chúng tôi sẽ chỉ đi qua 5 thuộc tính và tôi sẽ giải thích Nội dung() phương pháp trong Bước tiếp theo.

      Các “chiều rộng” & “Chiều cao” tính chất

      Các chiều rộngChiều cao Các thuộc tính tự động tính toán chiều rộng và chiều cao của mỗi cửa riêng lẻ (thay đổi theo chiều rộng và chiều cao của hình nền).

      Các bội số 0,1 và 0,95 nằm trong phương trình để chừa một khoảng trống cho lề, giữa mỗi cửa và xung quanh các cạnh của Lịch cũng vậy.

      Các “mạo hiểm” bất động sản

      Các mạo hiểm thuộc tính giữ nội dung của các thông điệp cảnh báo, cụ thể là các trích dẫn và các tác giả phù hợp với chúng tôi message.js giữ tập tin. Các mạo hiểm tài sản có một trích dẫn và một tác giả từ tin nhắn [] mảng, tùy thuộc vào ngày hiện tại.

      Cho ngày 1 tháng 12 mạo hiểm property lấy phần tử đầu tiên của mảng bên ngoài tin nhắn [0], vì các mảng là không dựa trên JavaScript.

      Vì lý do tương tự, báo giá cho ngày 1 tháng 12 được định vị là tin nhắn [0] [0] (phần tử đầu tiên của mảng bên trong) và tác giả phù hợp có thể đạt được như tin nhắn [0] [1] (phần tử thứ hai của mảng bên trong).

      Các “x”&”y” tính chất

      Tính chất xy giữ vị trí thích hợp của từng cánh cửa mà chúng ta sẽ sử dụng trong bước tiếp theo để đặt hàng đầutrái Thuộc tính CSS. Những thứ này sẽ bổ sung cho vị trí: tương đốivị trí: tuyệt đối Các quy tắc CSS mà chúng tôi đã đặt trong Bước 4 cho bộ chứa cửa (ul # AdventuresDoors) và chính các cửa (#adventDoors li). Các tính toán có vẻ hơi đáng sợ, nhưng hãy nhanh chóng lướt qua chúng.

      Các x tài sản sẽ được sử dụng bởi trái Thuộc tính định vị CSS trong Bước tiếp theo (Bước 7). Nó xác định bằng pixel trong đó một Cửa riêng lẻ cần được đặt trên trục x.

      Nó có chiều rộng của hình nền, và nó để lại một chút lề cho nó (4%). Sau đó, với sự trợ giúp của toán tử còn lại, nó đánh giá cột nào sẽ được đặt (hãy nhớ, sẽ có 4 cột) và cuối cùng, nó thêm một chút (10%) cho mỗi Cửa riêng lẻ bằng cách sử dụng hệ số nhân 1.1.

      Cùng một cách, y tài sản sẽ được sử dụng bởi hàng đầu Thuộc tính định vị CSS và tương tự, nó xác định bằng pixel trong đó một Cửa riêng lẻ cần được đặt trên trục y.

      Chúng tôi lấy chiều cao của hình nền với sự trợ giúp của thuộc tính chiều cao được truyền vào lịch tham số (chứa đối tượng DOM) và để lại lề 4% xung quanh các cạnh dọc của Lịch.

      Sau đó, với sự trợ giúp của phương thức Math.floor (), chúng tôi tính toán hàng nào sẽ có một đối tượng Door nhất định (sẽ có 6 hàng).

      Cuối cùng, chúng tôi thêm tỷ lệ 10% cho mỗi đối tượng Cửa bằng cách nhân chiều cao của nó bằng cách sử dụng hệ số nhân 1.1.

       hàm cửa this .height = ((calendar.height - 0.1 * calendar.height) / 6) * 0.95; this - 1] [1] + '\ n \ n'; this.x = (0,04 * calendar. thong + ((ngày - 1)% 4) * (1.1 * this. thong)); this .y = - (0.96 * calendar.height - Math.floor ((ngày - 1) / 4) * (1.1 * this.height)); this.content = function () S; 

      Bước 7 - Dân số “Nội dung()” phương pháp

      Nó là Nội dung() phương pháp sẽ hiển thị các cửa của chúng tôi trong trình duyệt. Trước hết, chúng tôi tạo một nút DOM mới với sự trợ giúp của biến nút điều đó sẽ tạo ra

    • các phần tử bên trong danh sách không có thứ tự hiện tại của chúng tôi (ul # AdventuresDoors) trong tệp HTML.

      Vì lớp Cửa sẽ được khởi tạo 24 lần trong một vòng lặp for trong Bước tiếp theo (Bước 8), điều này có nghĩa là chúng ta sẽ có 24

    • các yếu tố, một li cho mỗi cửa. Trong dòng tiếp theo, chúng tôi nối thêm nút mới vào #adventDoors danh sách không có thứ tự như là một phần tử con bằng cách sử dụng phương thức DOM appendChild ().

      Thuộc tính node.id trong dòng tiếp theo thêm một bộ chọn id duy nhất cho mỗi thành phần danh sách (cửa). Chúng ta sẽ cần điều này để có thể lặp đúng trong những ngày ở bước tiếp theo (Bước 8). Bằng cách này, Cửa 1 sẽ có một id =”cửa1 ", Cửa 2 sẽ có id =”cửa 2 " bộ chọn, v.v..

      Thuộc tính node.style.cssText trong dòng tiếp theo thêm một số quy tắc CSS cho từng thành phần danh sách (cửa) với sự trợ giúp của phong cách =”Giáo dục ” Thuộc tính HTML được sử dụng để bao gồm CSS nội tuyến trong các tệp HTML. Các node.style.cssText thuộc tính sử dụng các thuộc tính của lớp Cửa mà chúng ta đã đặt ở bước trước (Bước 6).

      Để làm cho đối tượng Cửa của chúng tôi có thể nhấp, chúng tôi cũng cần thêm một thẻ bên trong các yếu tố danh sách. Chúng tôi đạt được điều này với sự giúp đỡ của InternalNode biến mà chúng ta liên kết như là một phần tử con với phần tử danh sách thích hợp được xác định bởi id =”cửa [i]” bộ chọn (với [i] là số ngày), bằng cách sử dụng phương thức DOM appendChild () giống như trước đây.

      Thuộc tính InternalHTML trong dòng tiếp theo hiển thị ngày hiện tại (1-24) trên đầu cửa trong trình duyệt và chúng tôi cũng thêm một href =”#” thuộc tính cho các thẻ neo của chúng tôi bằng thuộc tính href DOM.

      Cuối cùng, trong câu lệnh if-other, chúng tôi đánh giá xem một đối tượng Cửa sẽ được bật hay tắt. Đầu tiên, chúng tôi kiểm tra xem chúng tôi có ở tháng thứ 12 của năm (tháng 12) hay không bằng cách sử dụng phương thức getMonth () của đối tượng Date. Chúng ta cần thêm 1, vì getMonth () không dựa trên (tháng 1 là tháng 0, v.v.).

      Sau này, chúng tôi kiểm tra xem ngày hiện tại được tổ chức trong ngay hiện tại biến toàn cục chúng tôi đặt ở Bước 5 nhỏ hơn ngày đối tượng Cửa hiện tại đại diện.

      Nếu không phải là tháng 12 hoặc ngày được đại diện bởi Cửa cụ thể lớn hơn ngày hiện tại, thì Cửa sẽ bị vô hiệu hóa, trong mọi trường hợp khác, nó cần được bật để người dùng có thể nhấp vào và xem thông báo Mùa Vọng có liên quan.

      Nếu Cửa bị vô hiệu hóa, chúng tôi thêm một lớp =”tàn tật” bộ chọn vào thẻ neo đã cho với sự trợ giúp của thuộc tính className. Hãy nhớ rằng, chúng tôi đã tạo kiểu .tàn tật lớp với CSS ở Bước 4. Chúng ta cũng cần đặt thuộc tính sự kiện HTML onclick để trả về false.

      Nếu Cửa ở trạng thái kích hoạt, chúng tôi sẽ thêm mạo hiểm thuộc tính cho một thông báo cảnh báo và đặt nó bên trong thuộc tính sự kiện HTML onclick.

       this.content = function () var node = document.createEuity ("li"); document.getEuityById ("AdventuresDoors"). appendChild (nút); node.id = "cửa" + ngày; node.style.cssText = "width:" + this. thong + "px; height:" + this.height + "px; top:" + this.y + "px; left:" + this.x + "px ; "; var InternalNode = document.createEuity ("a"); document.getEuityById ("cửa" + ngày) .appendChild (InternalNode); InternalNode.innerHTML = ngày; InternalNode.href = "#"; if ((currentDate.getMonth () + 1) < 12 || currentDate.getDate() < day )  innerNode.className = "disabled"; innerNode.onclick = function()  return false;   else  var adventMessage = this.adventMessage; innerNode.onclick = function()  alert(adventMessage); return false;   ;

      Bước 8 - Khởi tạo “Cửa” Các đối tượng

      Cuối cùng, chúng ta cần khởi tạo lớp Cửa 24 lần.

      Để làm như vậy, chúng tôi sử dụng Biểu thức hàm được gọi ngay lập tức khá hữu ích ở đây, vì chúng tôi không cần một biến vì chúng tôi chỉ muốn thực thi mã bên trong hàm một lần.

      Chúng tôi tạo ra một cửa [] mảng sẽ giữ các đối tượng 24 Cửa. Chúng tôi lặp qua các ngày từ 1 đến 24 (chúng sẽ là các phần tử 0-23 của mảng cửa [], vì các mảng dựa trên số 0) và cuối cùng trả về toàn bộ cửa [] mảng bao gồm các đối tượng 24 Cửa để hiển thị chúng trong trình duyệt.

       (hàm () var cửa = []; for (var i = 0; i < 24; i++)  doors[i] = new Door(myCal, i + 1); doors[i].content();  return doors; )();
      • Bản giới thiệu
      • Tải xuống nguồn