Kéo và thả HTML trò chơi
Đây là một phần trong tài liệu học tập của tôi để vượt qua kỳ thi Microsoft 70-480. Lập trình trong HTML5 với kỳ thi chứng chỉ JavaScript & CSS3 Show
Trước HTML5, khả năng sử dụng các thao tác kéo và thả chỉ có thể thực hiện được với một số trình duyệt nhất định và thường được triển khai bằng cách sử dụng thư viện của bên thứ ba, chẳng hạn như jQuery Bây giờ Kéo và thả là công dân hạng nhất của HTML5. Bạn vẫn có thể sử dụng jQuery cho các chức năng khác nhưng không bắt buộc phải kéo và thả 1. Kéo và thảTạo tính năng kéo và thả của HTML5 có nghĩa là bạn có thể có khả năng tương thích với trình duyệt và tích hợp trình duyệt. Điều này thậm chí có thể mở rộng để tích hợp với hệ điều hành Để minh họa kỹ thuật kéo và thả, hãy xem xét trang HTML sau đây, trang này xác định một vùng chứa hình vuông lớn bên trong nó
Tài liệu HTML này chứa một phần tử có 3 được gọi là 4. Bên trong container có bốncác phần tử là "lỗ hổng" có thể chứa một mục. Ba người đầu tiên được dân cư CSS sử dụng flexbox để định tâm và chứa các quy tắc sau
Quy tắc 5 căn giữa vùng chứatheo chiều ngang của trang. Quy tắc 6 đặt màn hình flexbox ở giữa và căn chỉnh từng lỗ () Các quy tắc trong 7 đặt màn hình flexbox ở giữa mỗi thành phần mục () trong mỗi lỗ. Quy tắc cuối cùng dành cho các mục và nó đặt một hình vuông màu xám với một số lớn ở giữa. Phần cuối cùng của kiểu thiết lập 8 để ngăn người dùng vô tình chọn văn bản khi cố gắng thực hiện thao tác kéo
2. hỗ trợ trình duyệtCó hai công cụ tôi sử dụng để đảm bảo mã tôi viết hoạt động trên nhiều trình duyệt và nền tảng nhất có thể. Nói cách khác, tôi nhận được sự tuân thủ của nhiều trình duyệt và mức độ phù hợp càng rộng càng tốt đối với các tính năng CSS, JavaScript và HTML5 mà tôi sử dụng Hai công cụ là 3. tôi có thể sử dụngĐây là một công cụ tuyệt vời cho phép bạn tìm kiếm bất kỳ tính năng HTML, JavaScript hoặc CSS nào và xem mức độ phù hợp của trình duyệt hiện tại đối với tính năng này. Sau đó, điều này cho phép bạn đưa ra quyết định sáng suốt về việc có nên sử dụng tính năng này như hiện tại hay không, sử dụng tính năng này với một polyfill và/hoặc tiền tố tự động hay tìm một cách hoàn toàn riêng biệt để triển khai chức năng Chẳng hạn, chúng tôi có một quy tắc CSS triển khai 8. Nếu sau đó tôi đi đến http. // caniuse. com, tôi có thể nhận được tất cả các loại thông tin về tính năng đóỞ đây tôi thấy tất cả các trình duyệt hiện đang hỗ trợ tính năng này cùng với số phiên bản đã bắt đầu hỗ trợ tính năng này. Điều này bao gồm IE11, Edge16+, Firefox58+, Chrome64+, v.v. Ngoài ra, tôi có thể di chuột qua bất kỳ hộp trình duyệt nào để xem ghi chú hỗ trợ, ngày phát hành và thị phần để biết tỷ lệ phần trăm người dùng sử dụng nền tảng cụ thể đó Thông tin tôi thấy thực sự hữu ích là số liệu thống kê ở phía bên tay phải của trang. Ở đây chúng tôi thấy rằng tính năng 0 của tôi sẽ được hỗ trợ trên toàn cầu vào năm 87. 23% của tất cả các trình duyệt và 97. 51% trình duyệt trong nướcDữ liệu đặc biệt thú vị là những con số không có tiền tố. Điều này cho thấy chúng ta sẽ chỉ có 57. 58% & 45. Tương ứng, hỗ trợ trình duyệt 56%, không bao gồm tính năng tự động sửa lỗi Điều này có nghĩa là chúng tôi sẽ mất một nửa cơ sở người dùng nếu chúng tôi không tự động sửa tiền tố CSS của mình 4. Tự động sửa tiền tố CSSVì vậy, autoprefixing là gì? Autoprefixing là quá trình sử dụng css dành riêng cho trình duyệt để đảm bảo một tính năng cụ thể được hiển thị chính xác trên nền tảng đó Hãy xem giao diện của CSS Autoprefixer Cách nó hoạt động là, chúng tôi sao chép CSS của mình vào vùng chứa nguồn và đầu ra có tiền tố CSS được hiển thị trong vùng chứa đầu ra. Sau đó, chúng tôi có thể sao chép và dán lại vào tệp css của mình Đối với hồ sơ, đây là cách thủ công để đạt được điều này. Có nhiều giải pháp bộ xử lý trước và sau sẽ tự động thực hiện việc này cho bạn, nhưng những giải pháp này yêu cầu cài đặt và cấu hình. Hiện tại, giải pháp nhanh và bẩn là chỉ cần sao chép và dán Như bạn có thể thấy, 8 xuất ra bốn quy tắc hoặc khai báo khác nhau để tuân thủ trên các trình duyệt khác nhauSử dụng CSS mới đảm bảo chức năng của tính năng sẽ tăng lần lượt từ 57 & 45% lên 87 và 97% Bước cuối cùng, sau khi chúng tôi hoàn thành công việc với CSS của mình, là sao chép nội dung của toàn bộ CSS của chúng tôi vào vùng chứa nguồn để có được bản sao đầu ra hoàn chỉnh Vì mục đích của những ghi chú này, tôi sẽ giữ cho CSS đơn giản và không có tiền tố 5. kéoĐể chỉ định cho trình duyệt rằng một phần tử có thể được kéo, hãy sử dụng thuộc tính 2. Nó có ba giá trị hợp lệ. 3, 4 và 5. Đối với hầu hết các trình duyệt, 5 là giá trị mặc định, có nghĩa là trình duyệt quyết định xem phần tử đó có thể kéo được hay không. Ví dụ: phần tử 7 thường có thể kéo được theo mặc định, nhưngkhông phải Trong mẫu HTML này, mục này là một phần tử và nó không thể kéo theo mặc định, vì vậy chúng tôi cần thêm thuộc tính có thể kéo
Sau khi thêm thuộc tính 2 vào các mục, bạn có thể kéo chúng
Bạn có thể kéo và mục, nhưng mục chứa biểu tượng con trỏ cấm vào để cho biết rằng mục đó không thể bỏ được 6. Hiểu các sự kiện kéoKhi kéo và thả, có những sự kiện dựa trên phần tử được kéo và có những sự kiện dựa trên mục tiêu thả. Sử dụng các sự kiện này, bạn sẽ có thể tùy chỉnh thao tác kéo và thả khi cần. Các sự kiện sau dựa trên phần tử được kéo
Đoạn mã sau được đặt trong scramble1. js và hiển thị việc sử dụng các sự kiện 9 và 0 để thay đổi kiểu của mục được kéo cho đến khi quá trình kéo kết thúc
Ví dụ sử dụng chức năng sẵn sàng cho tài liệu jQuery để đăng ký các sự kiện 9 và 0 trên tất cả các phần tử được gán lớp CSS 'mục'. Hàm 3 thêm lớp CSS 'kéo' khi quá trình kéo bắt đầu và sau đó đặt 4 với giá trị của mục được kéo. Hàm 5 loại bỏ lớp 'kéo'Trong tệp CSS, quy tắc kéo được xác định như sau
Thao tác này sẽ thay đổi nền của mục được kéo cho đến khi quá trình kéo dừng lại
7. RơiSau khi kéo, thả phải được thực hiện. Các sự kiện sau dựa trên mục tiêu thả
Các sự kiện 6 và 7 mặc định từ chối vật phẩm được kéo, đó là lý do tại sao bạn hiện không thể thả vật phẩm. Bạn có thể kích hoạt thả bằng cách hủy hành động mặc định đối với các sự kiện nàySự kiện 8 xóa mục bị xóa khỏi mô hình đối tượng tài liệu (DOM) và sau đó thêm mục đó trở lại DOM tại vị trí vùng thả. Đoạn mã sau đăng ký các sự kiện 6, 7 và 8
Trong ví dụ này, chức năng sẵn sàng cho tài liệu đã thêm các câu lệnh để đăng ký vào 6, 7 và 8. Lưu ý rằng 6 và 7 gọi cùng một hàm 7, điều này ngăn chặn việc từ chối các mục được kéoSự kiện 8 gọi hàm dropItem. Trong 9, một đối tượng jQuery được tạo từ 0, là mục tiêu thả xuống và được gán cho một biến 1. Câu lệnh 2 kiểm tra xem mục tiêu thả có lớp CSS 'lỗ hổng' hay không. Điều này là cần thiết vì bạn có thể làm rơi thứ gì đó lên trên 'vật phẩm' thay vì 'lỗ hổng'Khi vật phẩm ở trong lỗ, sự kiện thả bong bóng sẽ nổi lên và thực hiện sự kiện thả vào lỗ. Nếu mục tiêu thả là một cái lỗ, mã sẽ kiểm tra xem có trẻ em hay không; Nếu mục tiêu thả là một lỗ không có con, jQuery sẽ tách mục được kéo khỏi DOM và sau đó nối thêm 4 vào mục tiêu thả
8. Sử dụng đối tượng DataTransferVí dụ trước minh họa thao tác kéo và thả hoàn chỉnh, nhưng bạn cũng có thể sử dụng đối tượng 6 để truyền dữ liệu từ sự kiện 9 sang sự kiện 8Bằng cách sử dụng đối tượng DataTransfer, bạn không cần tạo biến toàn cục để tham chiếu mục đang được kéo. Việc sử dụng đối tượng DataTransfer cũng cho phép bạn chuyển bất kỳ dữ liệu nào đến sự kiện 8 miễn là dữ liệu đó có thể được biểu diễn dưới dạng chuỗi hoặc URL. Đối tượng 0 được tham chiếu như một thuộc tính 1 trong sự kiện 9
Bạn có thể truyền dữ liệu cho sự kiện drop bằng cách sử dụng thuộc tính 1. Đối tượng DataTransfer có các thành viên sau
Trong ví dụ sau, tài liệu HTML có một danh sách ô tô không có thứ tự, từ đó bạn có thể kéo và thả bất kỳ ô tô nào vào một danh sách ô tô yêu thích không có thứ tự khác như sau
Tại đây, mỗi mục trong danh sách ô tô đều có thể kéo được và sử dụng thuộc tính dữ liệu để cung cấp dữ liệu sẽ được thu thập khi quá trình kéo bắt đầu và sau đó được chuyển đến sự kiện 8. Tệp JavaScript tương tự như ví dụ trước, được sử dụng để di chuyển số, nhưng lần này, dữ liệu được chuyển đến sự kiện thả bằng cách sử dụng đối tượng DataTransfer như sau
Trong chức năng sẵn sàng cho tài liệu, chúng tôi đăng ký các sự kiện cần thiết. Hàm 3 được gọi khi quá trình kéo bắt đầu. Nó thu thập dữ liệu từ thuộc tính data-value và gán nó cho đối tượng DataTransfer. Thuộc tính 02 được đặt thành 'sao chép', thay đổi con trỏ chuột thành con trỏ có dấu cộng bên dưới. Nếu nó được đặt thành 'di chuyển', con trỏ sẽ là một con trỏ có hộp nhỏ bên dướiHàm 9 được gọi từ sự kiện 8. Đối tượng DataTransfer cũng có sẵn trong sự kiện drop thông qua thuộc tính 1. Dữ liệu được lấy ra, chia thành một mảng và được gán cho một biến. Tiếp theo, phần tử được kiểm tra xem đó có phải là ô tô không. Nếu vậy, một mục danh sách mới được tạo và nối vào phần tử thả. Cuối cùng, chúng tôi gọi phương thức 7 của sự kiện đã xử lý dữ liệu bị mất để trình duyệt mặc định xử lý cũng không xử lý dữ liệu bị mất
9. Tóm lược
10. câu hỏi ôn tập
11. Kéo và thả tập tinBạn có thể kéo và thả tệp bằng API tệp (giao diện lập trình ứng dụng), cũng là một phần của HTML5. API tệp cung cấp quyền truy cập gián tiếp vào tệp theo cách được kiểm soát chặt chẽ 12. Sử dụng các đối tượng FileList & FileKhi xóa một tệp, đối tượng DataTransfer trả về một đối tượng 14 là tập hợp của các đối tượng 15 đã bị xóa. Đối tượng 15 có các thuộc tính sau
Tài liệu HTML sau đây có một phần tử mà các tệp có thể được thả vào và một 17
|