Trang chủ » Mã hóa » Thiết kế ứng dụng di động / Điều hướng tòa nhà Dev với jQuery

    Thiết kế ứng dụng di động / Điều hướng tòa nhà Dev với jQuery

    Điện thoại thông minh hiện được trang bị một số trình duyệt web rất hiệu quả. JavaScript mạnh hơn bao giờ hết và có thể được mở rộng với sự trợ giúp của các thư viện mã như jQuery. Khi bạn thêm các thông số kỹ thuật HTML5 / CSS3 mới nhất, có thể xây dựng các ứng dụng web di động rất linh hoạt với một số mã lối vào cơ bản.

    Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách xây dựng một trang web / ứng dụng web dựa trên thiết bị di động. Chúng tôi sẽ sử dụng truy vấn phương tiện CSS3 để nhắm mục tiêu các thiết bị cụ thể và độ phân giải màn hình. Cộng với một chút jQuery giúp tạo hiệu ứng cho menu và tải nội dung trang bên ngoài bằng các lệnh gọi Ajax. Thậm chí tốt hơn, bố cục thậm chí có thể mở rộng để hiển thị đúng trong các trình duyệt máy tính để bàn thông thường như Chrome hoặc Firefox.

    • Bản thử trực tiếp
    • Mã nguồn

    Xác định cấu trúc trang

    Trước tiên, hãy bắt đầu bằng cách truy cập trang HTML và định kiểu trang đó bằng một số quy tắc CSS. Tôi sẽ bỏ qua hầu hết các thẻ meta bất thường trong tiêu đề vì chúng không ảnh hưởng trực tiếp đến ứng dụng web. Tuy nhiên, có một vài điều tôi nên đề cập, cụ thể là từ đoạn trích dưới đây:

        

    Tương thích X-UA được sử dụng để mô tả cách tài liệu của bạn sẽ hiển thị trong một số trình duyệt nhất định. Đó là một kịch bản thú vị khi mã hóa trong HTML5, vì vậy tôi sẽ không lo lắng quá nhiều về điều này. Tuy nhiên, meta khung nhìn thẻ rất quan trọng. Nó đặt cửa sổ trình duyệt di động thành 100% thay vì hiệu ứng thu phóng tiêu chuẩn.

    Cũng có thể vô hiệu hóa thu phóng người dùng với giá trị nội dung người dùng có thể mở rộng = không. Nhưng trong trường hợp này, chúng tôi chỉ muốn đặt chiều rộng toàn màn hình giống với chiều rộng thiết bị của chúng tôi. Các thẻ ứng dụng web của Apple sẽ cho phép trang web được lưu dưới dạng biểu tượng màn hình chính vào iPhone hoặc iPod Touch của bạn. Không hoàn toàn cần thiết nhưng chắc chắn có giá trị.

    Nội dung cơ thể

    Bên trong thẻ body Tôi đã thiết lập div trình bao bọc với ID #w. Bên trong tôi đã chia bố cục thành hai div khác bằng ID #pagebody#navmenu. Toàn bộ chiều rộng của trang được giới hạn ở 640px theo lựa chọn để bố cục tỷ lệ thành một số nghiêm ngặt.

    Điện thoại di động HK

    Chào mừng đến với trang web di động!

    Menu điều hướng được cung cấp một giá trị chỉ mục z thấp hơn để #pagebody luôn luôn đứng đầu. Điều này rất quan trọng vì mã JavaScript sẽ trượt trên thân trang một số pixel nhất định để hiển thị điều hướng bên dưới.

    Tôi đã sử dụng biểu tượng băm (#) trước mỗi trang .html để ngăn chặn một số hành vi kém trong Mobile Safari. Bất cứ khi nào bạn nhấp vào một liên kết, thanh URL sẽ xuất hiện và đẩy nội dung xuống. Nhưng khi tham chiếu ID, không có gì được tải lại ngoại trừ thông qua các cuộc gọi JavaScript.

    Định vị CSS

    Không có nhiều nội dung khó hiểu trong mã CSS của chúng tôi. Hầu hết các định vị được thực hiện thủ công và sau đó thao tác thông qua jQuery. Nhưng có một vài điều thú vị trong tài liệu của chúng tôi.

    / ** @group cơ thể cốt lõi ** / #w #pagebody vị trí: tương đối; trái: 0; chiều rộng tối đa: 640px; chiều rộng tối thiểu: 320px; chỉ số z: 99999;  #w #navmenu nền: # 475566; chiều cao: 100%; hiển thị: khối; vị trí: cố định; chiều rộng: 300px; trái: 0px; đầu trang: 0px; chỉ số z: 0; 

    Phân đoạn hàng đầu này xác định kiểu cho cả hai phần của trang. Menu điều hướng của chúng tôi chỉ rộng 300px, vì vậy điều này để lại một chút chỗ cho nội dung trang vẫn được nhìn thấy. Nút menu mở / đóng cũng được đặt trực tiếp ở phía bên trái và luôn có thể truy cập được. Phần quan trọng ở đây là giá trị thuộc tính z-index và sử dụng vị trí: cố định; trên Navmenu của chúng tôi.

    Tiêu đề thanh công cụ trên cùng cũng là một phần thú vị. Điều này được đặt ở một vị trí cố định để nó sẽ cuộn với nội dung trang. Điều này tái tạo hiệu ứng tương tự như bạn tìm thấy trong bất kỳ thanh tiêu đề ứng dụng iOS nào.

    / ** tiêu đề @group ** / #w #pagebody tiêu đề # toolbarnav display: block; vị trí: cố định; trái: 0px; đầu trang: 0px; chỉ số z: 9999; nền: # 0b1851 url ('img / tabbar-solid-bg.png') trên cùng bên trái không lặp lại; bán kính đường viền: 5px; -moz-viền-bán kính: 5px; -webkit-Border-radius: 5px; -o-Border-radius: 5px; biên-dưới-phải-bán kính: 0; -moz-Border-radius-bottomright: 0; -webkit-Border-bottom-right-radius: 0; biên-dưới-trái-bán kính: 0; -moz-Border-radius-bottomleft: 0; -webkit-Border-bottom-left-radius: 0; chiều cao: 44px; chiều rộng: 100%; chiều rộng tối đa: 640px;  #w #pagebody tiêu đề # toolbarnav h1 text-align: centre; đệm-top: 10px; đệm-phải: 40px; màu: # e6e8f2; font-weight: in đậm; cỡ chữ: 2.1em; bóng văn bản: 1px 1px 0px # 313131; 

    Quy tắc di động

    Thật dễ dàng để nhận thấy tôi cũng đang sử dụng một hình ảnh nền cho kết cấu thanh tiêu đề màu xanh. Đây là kích thước 640 × 44 pixel để phù hợp với cấu trúc bố cục nhất quán. Nhưng tôi cũng đã phát triển một hình ảnh @ 2x cho màn hình retina của iPhone / iPad. Bạn có thể xem cả hai hình ảnh bên dưới hoặc lấy chúng từ mã nguồn demo của tôi.

    Tôi thiết lập CSS di động cho chức năng này trong một tệp khác có tên responsive.css. Nó chứa hai truy vấn phương tiện thay thế thanh tiêu đề bg và biểu tượng nút menu cho thiết bị võng mạc.

    / ** màn hình retina ** / @media chỉ màn hình và (-webkit-min-device-pixel-ratio: 2), chỉ màn hình và (min - moz-device-pixel-ratio: 1.5), chỉ màn hình và ( min-device-pixel-ratio: 1.5) #w #pagebody tiêu đề nền: # 0b1851 url ('img/[email protected] ') trên cùng bên trái không lặp lại; kích thước nền: 640px 44px;  #w #pagebody tiêu đề # menu-btn nền: url ('img/[email protected] ') không lặp lại; kích thước nền: 53px 30px; 

    Thiết kế Mũi tên Menu

    Trong khu vực điều hướng tôi cũng đã bao gồm một biểu tượng mũi tên nhỏ ở bên phải của mỗi liên kết menu. Điều này có thể dễ dàng được thay thế bằng một hình ảnh từ bất kỳ tác phẩm nghệ thuật commons sáng tạo. Nhưng hầu hết tất cả người hâm mộ CSS3 sẽ thích thử nghiệm phương pháp này.

    #w #navmenu ul li a :: after content: "; display: block; width: 6px; height: 6px; Border-right: 3px solid # d0d0d8; Border-top: 3px solid # d0d0d8; vị trí: tuyệt đối; : 30px; top: 45%; -webkit-Transform: rotation (45deg); -moz-Transform: rotation (45deg); -o-Transform: rotation (45deg); Transform: rotation (45deg); #w #navmenu ul li a: hover :: after Border-color: # cad0e6;

    Chúng tôi đang sử dụng biến đổi tài sản để tạo ra một biên giới nhỏ sau nội dung. Tôi cũng thiết lập vị trí: tuyệt đối; vì vậy chúng ta có thể tự do di chuyển các đường viền này xung quanh mục liên kết bên trong. Thật dễ dàng để thay đổi màu đường viền trên trạng thái di chuột, mang lại cảm giác năng động hơn. Thật đáng kinh ngạc những gì bạn có thể thực hiện chỉ bằng cách sử dụng các quy tắc HTML5 và CSS3 cơ bản.

    Nhưng bây giờ, hãy chuyển sang các bit và đoạn mã JavaScript. Hãy nhớ điều này yêu cầu bao gồm thư viện jQuery để mã của tôi chạy đúng.

    Hoạt hình jQuery

    Khi viết các mã tùy chỉnh này, tôi đã tạo một tài liệu hoàn toàn mới có tên script.js. Hãy viết chúng trực tiếp vào > thẻ hoặc tải xuống ví dụ của tôi từ mã nguồn demo.

    $ (tài liệu). yet (function () var pagebody = $ ("# pagebody"); var themothy = $ ("# navmenu"); var topbar = $ ("# toolbarnav"); var content = $ (" #content "); var viewport = width: $ (window). thong (), height: $ (window) .height (); // truy xuất các biến như // viewport. thong / viewport.height 

    Để bắt đầu, tôi đã thiết lập một số biến trang nơi chúng tôi có thể tham chiếu các yếu tố trong tài liệu nhanh hơn nhiều. Giá trị khung nhìn không bao giờ được sử dụng, nhưng nó có thể hữu ích nếu bạn muốn điều chỉnh các giai đoạn hoạt hình. Ví dụ: bạn có thể kiểm tra độ rộng của trình duyệt hiện tại và mở menu của bạn nhỏ hơn hoặc rộng hơn tương ứng.

    hàm openme () $ (function () topbar.animate (left: "290px", thời gian: 300, hàng đợi: sai); pagebody.animate (left: "290px", thời gian: 300 , hàng đợi: sai););  function closeme () var closeme = $ (function () topbar.animate (left: "0px", thời gian: 180, queue: false); pagebody.animate (left: "0px", thời lượng: 180, hàng đợi: sai);); 

    Tiếp theo tôi đã xác định hai chức năng quan trọng để mở và đóng menu. Chúng có thể được thực hiện trong một chức năng duy nhất và chuyển đổi cuộc gọi lại - ngoại trừ chúng ta thực sự cần phải làm động hai yếu tố riêng biệt cùng một lúc. Thật không may, đây không phải là hành vi mặc định cho jQuery, vì vậy chúng tôi cần sử dụng một cú pháp thay thế.

    Hai yếu tố chúng tôi nhắm mục tiêu được đặt tên thanh đỉnhtrang. Khu vực nội dung bên trong với nền trắng là toàn bộ trang; tuy nhiên chúng tôi có vị trí thanh tiêu đề cố định ở đầu trang. Điều này có nghĩa là nó sẽ không tự động hoạt động với trang và chúng tôi cần sử dụng một cuộc gọi riêng. Việc mở được thiết lập để đẩy sang bên trái 290px (gần như toàn bộ chiều rộng điều hướng 300px) và chức năng đóng rút lại nó.

    Đang tải nội dung động

    Mã ở trên là đủ dễ dàng để chăm sóc hoạt hình. Và về mặt lý thuyết đó là tất cả những gì bạn cần cho một trang web di động đơn giản như vậy - nhưng tôi muốn thêm một chút nữa.

    Mỗi lần người dùng nhấp vào liên kết menu, chúng tôi muốn đóng điều hướng hiện tại và hiển thị gif đang tải trong khi chúng tôi tìm nội dung trang. Sau khi hoàn thành, chúng tôi xóa hình ảnh gif và tải tất cả vào bên trong. Điều này thật tuyệt vời vì chúng tôi thậm chí có thể sử dụng các trang .html tĩnh cho nội dung. Không có PHP hoặc Ruby hoặc Perl hoặc bất kỳ ngôn ngữ phụ trợ nào để khiến mọi thứ trở nên lộn xộn.

    Quản lý lần nhấp

    Trước hết, chúng tôi muốn kiểm tra khi người dùng nhấp vào nút điều hướng. Điều này sẽ ngăn giá trị href href tải và thay vào đó chúng ta có thể sử dụng các chức năng của mình để hiển thị nội dung bên ngoài.

    // tải nội dung trang để điều hướng $ ("a.navlink"). live ("click", function (e) e.preventDefault (); var linkurl = $ (this) .attr ("href"); var linkhtmlurl = linkurl.sub chuỗi (1, linkurl.length); var imgloader = '
    ';

    Bây giờ chúng tôi đang mở một bộ chọn cho bất kỳ neo nào với lớp điều hướng. Bất cứ khi nào người dùng nhấp vào một trong những liên kết này, chúng tôi sẽ ngừng tải và thiết lập một biến cho URL đầy đủ. Tôi cũng đã thiết lập một biến cho HTML nội dung để bao gồm trình tải hình ảnh tiêu chuẩn. Nếu bạn muốn tùy chỉnh riêng của mình, tôi khuyên bạn nên tải Ajax.

    Ajax .load ()

    Có hai phần khác nhau cho hiệu ứng này mà tôi đã chia tay gọn gàng. Mã dưới đây là bit đầu tiên của chúng tôi sẽ đóng menu điều hướng và trượt toàn bộ cửa sổ tài liệu lên trên cùng. Chúng tôi muốn thay thế nội dung bên trong cơ thể bằng một hình ảnh động của trình tải nhỏ và người dùng không thể thấy điều này nếu họ đang nhìn vào cuối trang.

    gần tôi(); $ (function () topbar.css ("top", "0px"); window.scrollTo (0, 1););

    Bây giờ cuối cùng chúng tôi muốn thay thế nội dung cơ thể bên trong bằng hình ảnh của chúng tôi và tìm nạp trang bên ngoài để tải. Thông thường, việc này sẽ chỉ mất vài trăm mili giây hoặc thậm chí nhanh hơn, vì vậy tôi đã đặt chức năng hết thời gian.

    nội dung.html (imgloader); setTimeout (function () content.load (linkhtmlurl, function () / * không gọi lại * /), 1200);

    Điều này sẽ tạm dừng 1200 mili giây trước khi tải nội dung mới. Đối với bản demo của tôi, nó trông tốt hơn rất nhiều và cho bạn ý tưởng về cách ứng dụng sẽ hoạt động trên các kết nối Internet chậm hơn.

    Phần kết luận

    Tôi khuyến khích tất cả các nhà phát triển web tải xuống mã nguồn hướng dẫn và tự mình chơi xung quanh. Đây là một ví dụ cơ bản về những gì có thể được thực hiện với HTML / CSS3 và một chút hiệu ứng JavaScript. Xây dựng cho màn hình di động trở nên dễ dàng hơn bao giờ hết với các truy vấn phương tiện và các trình duyệt web mở rộng hơn.

    Xem nếu bạn có thể áp dụng bất kỳ mã nào trong các dự án web trong tương lai của bạn. Xây dựng các ứng dụng di động là một nghệ thuật, giống như thiết kế web và đòi hỏi nhiều sự cống hiến và thực hành. Tôi hy vọng hướng dẫn này có thể là điểm khởi đầu tốt cho chỉ một vài nhà phát triển nhiệt tình. Nếu bạn có câu hỏi hoặc suy nghĩ về mã, hãy chia sẻ với chúng tôi trong khu vực thảo luận bài.