04 jQuery Mobile

Preview:

Citation preview

jQuery MobileDesign “native” mobile apps

Wednesday, October 31, 12

jQuery Mobile

A Mobile UI framework

Implements native looking UI components

Wednesday, October 31, 12

Real World jQM

http://c.dric.be/ http://m.anticocasalediscansano.it/en/

Wednesday, October 31, 12

jQuery Mobile Dark Side

Needs jQuery

jQM way or the highway

Performance

Wednesday, October 31, 12

jQM When

Use for Mobile Subdomain

Use for landing pages

Use for small static mobile web site

Wednesday, October 31, 12

jQuery Mobile Bright Side

Page layout

UI Controls

jQM API

Theming

Wednesday, October 31, 12

Page Layout

Wednesday, October 31, 12

Using jQM<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" />

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

<script src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script>

Copied From http://jquerymobile.com/download/

Wednesday, October 31, 12

Page Layout

a page is just a div with data-role=”page”

a jQM page has:

header

content

footer

Wednesday, October 31, 12

Page Example

<div data-role="page"> <div data-role="header">...</div>

! <div data-role="content">...</div> ! <div data-role="footer">...</div> </div>

Wednesday, October 31, 12

Multi Page Layout

Multiple pages can be specified in the same .html file

Each page is identified with an id attribute

Navigation is performed using a tags

Back button is generated for pages that have data-add-back-btn=”true”

Wednesday, October 31, 12

Using transitions

Transitions are determined via the data-transition attribute

<p><a href="#about" data-transition="slideup">About this app</a></p>

Wednesday, October 31, 12

Page TransitionsEffect Name Description

slide slide right-to-left. This is the default

slideup slide from bottom-to-top

slidedown slide from top-to-bottom

pop expand the new page (dialog pop-up style)

fade fade the new page in

flip flip pages (like cards).

Wednesday, October 31, 12

Exercise

Write a mobile website with four pages.

First page: text and link.

Second page: back button and an image.

Third and fourth pages: simple texts

Create transition effects using: slide, pop, fade, flip

Wednesday, October 31, 12

jQuery Mobile

Page layout

UI Controls

jQM API

Theming

Wednesday, October 31, 12

jQM UI ControlsjQM provides ready-made UI controls for our app that “look” native.

This rich library includes:

Toolbars

Buttons

Forms & Lists

Wednesday, October 31, 12

Toolbars

A header with data-position=”fixed”

Implements fixed position using JavaScript

Wednesday, October 31, 12

Toolbars

We can add buttons to toolbars simply by writing them in the bar

header bar can have 2 buttons

Use inside header:<a href=”#” data-role=”button”>Add</a>

Wednesday, October 31, 12

Toolbars

Careful not to put too many buttons - looks bad

Wednesday, October 31, 12

Toolbars

Footer can have as many buttons as you wish

Add class=”ui-bar” to get padding

Demo

Wednesday, October 31, 12

Toolbars

Again, don’t put too many buttons or it’ll look bad

Wednesday, October 31, 12

Toolbar Exercise

Implement a mockup for a mail reader application

Top toolbar button: Logout

bottom toolbar buttons: Compose, delete, forward, reply.

Wednesday, October 31, 12

Buttons

An anchor tag with data-role=”button” will look like a button

Any normal form button will automatically be converted

Wednesday, October 31, 12

Button Icons

data-icon attribute allows using icons on a button

Wednesday, October 31, 12

Button Iconsarrow-l

arrow-r

arrow-u

arrow-d

delete

plus

minus

check

gear

refresh

forward

back

grid

star

alert

info

home

search

Wednesday, October 31, 12

Icon Positions

data-iconpos determines the icon position

possible values: right, top, bottom, notext

Wednesday, October 31, 12

Inline Buttons

Dialog buttons are usually placed side-by-side

This is called inline, and achieved viadata-inline=”true”

Wednesday, October 31, 12

Buttons DemoWednesday, October 31, 12

Button Exercise

Implement a jQM app with three buttons titled: red, blue and green

App background color should change when a user presses a button

Bonus: use gradients as background

Wednesday, October 31, 12

Basic List<ul data-role="listview" data-theme="g">

! <li><a href="acura.html">Acura</a></li>! <li><a href="audi.html">Audi</a></li>! <li><a href="bmw.html">BMW</a></li> </ul>

Wednesday, October 31, 12

Numbered List

<ol data-role="listview" data-theme="g">! <li><a href="acura.html">Acura</a></li>! <li><a href="audi.html">Audi</a></li>! <li><a href="bmw.html">BMW</a></li></ol>

Wednesday, October 31, 12

Count Bubble List

Wrap the number in an element with ui-li-count to get the “count bubble”<li> <a href=”#”>Inbox <span class=”ui-li-count”>12</span> </a></li>

Wednesday, October 31, 12

Thumbnail Lists

Insert an img tag as the first child in the anchor to get a thumbnail

Image is automatically scaled by jQM

Wednesday, October 31, 12

Split List

Having two links in the same item creates a split list

Wednesday, October 31, 12

Inset Lists

A list that is embedded in a page is called inset

use data-inset=”true” to get the effect

Wednesday, October 31, 12

Exercise

Implement the following home screen

Wednesday, October 31, 12

Navigation Bars

Navigation elements at the top or bottom of the page

Sometimes referred as “tab bars”

<div data-role="footer">! <div data-role="navbar">! ! <ul>! ! ! <li><a href="#" class="ui-btn-active">One</a></li>! ! ! <li><a href="#">Two</a> </li>! ! </ul>! </div><!-- /navbar --></div><!-- /footer -->

Wednesday, October 31, 12

Top Nav Bar

Put the above code in the header to get top nav bars

They are recommended for mobile apps running inside the browser

Wednesday, October 31, 12

Bottom Nav Bar

Put the above code in the footer to get bottom nav bar

Recommended in standalone apps

Wednesday, October 31, 12

Tab Bars (ala iPhone)

Use data-icon to get icons in the nav bars above the text

Custom icons are also allowed

Free iOS Style Icons:http://glyphish.com/

Wednesday, October 31, 12

Icon Gridsdivs can be lines up in columns (or grid)

<div class=”ui-grid-b”> <div class=”ui-block-a”> </div> <div class=”ui-block-b”> </div> <div class=”ui-block-c”> </div></div>

Wednesday, October 31, 12

Exercise

Implement the following

App is 2 tabs: Home and Image Gallery

Home includes text info on eating vegetables

Gallery has photos of vegetables (use google images)Solution at: http://apps.ynonperek.com/mobileweb/jqm/vegapp/

Wednesday, October 31, 12

FormsMobile optimized controls

Wednesday, October 31, 12

Mobile Optimized Forms

jQuery mobile provides a complete set of finger friendly form elements

Most form elements are automatically initialized by jQM

Prevent auto initialization with data-role=”none”

Wednesday, October 31, 12

jQuery vs. Normal

Wrap a labe/input pair in a divwith data-role=”fieldcontain”to get the cool thin line

Wednesday, October 31, 12

Refresh

Form controls can be set programmatically

Must call “refresh” to refresh the ui

Use $(‘#fld-radio’).checkboxradio(“refresh”);

Wednesday, October 31, 12

Form Elements

Text Inputs

Sliders

Buttons

Select Menu

Submitting Forms

Wednesday, October 31, 12

Text InputsAvailable input types: text, password, number, email, url, tel, search

textarea provides multi-line text

triggers ‘create’ event on creation

Wednesday, October 31, 12

Slider

input type=”range” creates a slider

attributes: value, min, max

refresh with .slider(‘refresh’);

Wednesday, October 31, 12

Buttons - Flip Switch

<div data-role="fieldcontain">! <label for="slider">Select slider:</label>! <select name="slider" id="slider" data-role="slider">! ! <option value="off">Off</option>! ! <option value="on">On</option>! </select> </div>

Wednesday, October 31, 12

Buttons - Radio<div data-role="fieldcontain"> <fieldset data-role="controlgroup"> ! <legend>Choose a pet:</legend> ! <input type="radio" id="radio-choice-1" value="choice-1" name=”pet” checked="checked" /> ! <label for="radio-choice-1">Cat</label>

! <input type="radio" id="radio-choice-2" value="choice-2" name=”pet” /> ! <label for="radio-choice-2">Dog</label>

! <input type="radio" id="radio-choice-3" value="choice-3" name=”pet” /> ! <label for="radio-choice-3">Hamster</label>

! <input type="radio" id="radio-choice-4" value="choice-4" name=”pet” /> ! <label for="radio-choice-4">Lizard</label> </fieldset></div>

Wednesday, October 31, 12

Buttons - Radio

Add data-type=”horizontal” to fieldset to get the horizontal radio buttons

Refresh with .checkboxradio(‘refresh’);

Wednesday, October 31, 12

CheckBoxes

Wednesday, October 31, 12

CheckBoxes

<div data-role="fieldcontain"> <fieldset data-role="controlgroup"> <legend>Choose as many snacks as you like</legend>

<input type="checkbox" name="checkbox-1" id="checkbox-1" /> <label for="checkbox-1">Cheetos</label>

<input type="checkbox" name="checkbox-2" id="checkbox-2" /> <label for="checkbox-2">Doritos</label>

<input type="checkbox" name="checkbox-3" id="checkbox-3" /> <label for="checkbox-3">Fritos</label>

<input type="checkbox" name="checkbox-4" id="checkbox-4" /> <label for="checkbox-4">Sun Chips</label>

</fieldset></div>

Wednesday, October 31, 12

CheckBoxes

Use data-role=”horizontal” for horizontal checkboxes

Remember the outer div with data-role=”fieldcontain” so jQM can outline the field

CheckBoxes & Radio Buttons both use a legend for the question text

Wednesday, October 31, 12

Submitting Forms

AJAX is used to submit the forms

No Ajax forms are created with data-ajax=false

Wednesday, October 31, 12

Q & A - Forms

Wednesday, October 31, 12

Forms ExerciseImplement a 2 page registration from using jQM with the following fields:

Page 1 Page 2

username (text) gender (m/f)

password (pass) favorite colors (red, blue or green)can have more than one

phone number comments (text area)

email

Wednesday, October 31, 12

jQuery Mobile

Page layout

UI Controls

jQM API

Theming

Wednesday, October 31, 12

jQM API

Default configurations

jQM Events

Methods & Utilities

Wednesday, October 31, 12

The mobileinit Event

bind to mobileinit event

Note: this event triggers immediately upon loading jqm

$(document).bind("mobileinit", function(){

//apply overrides here});

Wednesday, October 31, 12

The mobileinit EventOverriding defaults is simply changing object attributes

Full list of configurable options at: http://jquerymobile.com/demos/1.0b2/docs/api/globalconfig.htmlglobalconfig.html

$(document).bind("mobileinit", function(){

$.mobile.defaultPageTransition = ‘slide’;});

Wednesday, October 31, 12

jQM Eventstap

taphold

swipe

swipeleft

swiperight

orientationchange

scrollstart

scrollstop

pageshow

pagehide

pagecreate

pageinit

Wednesday, October 31, 12

jQM Methods

$.mobile.changePage(to, options)

$.mobile.silentScroll

Full list at: http://jquerymobile.com/demos/1.0b2/docs/api/globalconfig.html#/demos/1.0b2/docs/api/methods.html

Wednesday, October 31, 12

Exercise (1)

Implement a jQM app that has two pages

First page keeps a combo box with values: slide, flip; and a “go” button

When a user clicks “go”, app moves to the second page in the selected transition style

Wednesday, October 31, 12

Exercise (2)

Modify previously implemented “switching cards” to use swipe gestures

Wednesday, October 31, 12

jQuery Mobile

Page layout

UI Controls

jQM API

Theming

Wednesday, October 31, 12

jQM Themes

The theme controls how elements look on the page

Each theme has swatches for color play

Default theme has 5 swatches marked a,b,c,d,e

Wednesday, October 31, 12

Default Theme

Wednesday, October 31, 12

jQM Customize Theme

To customize a theme:

Edit jQM css

Copy a swatch definitions as a new swatch

Change the swatch letter

Make your changes

Wednesday, October 31, 12

Q & A

Wednesday, October 31, 12

Thank You

Ynon Perek

ynonperek@yahoo.com

ynonperek.com

Wednesday, October 31, 12

Recommended