SlideShare ist ein Scribd-Unternehmen logo
1 von 48
UX Considerations for Mapping Apps
on Touch Devices

“Touch-friendly mapping apps”



Allan Laframboise
Frank Garofalo



                           #uxmaptouchapp #esriuc #mapux #gisux
So you’ve got a web mapping app…




                        #uxmaptouchapp #esriuc #mapux #gisux
So you’ve got a web mapping app…
             …is it usable on a touch device?




                         #uxmaptouchapp #esriuc #mapux #gisux
#uxmaptouchapp #esriuc #mapux #gisux
Why?




       #uxmaptouchapp #esriuc #mapux #gisux
Time                     Design
       Cost


              Knowledge


Standards

        Technical Limitations


                   #uxmaptouchapp #esriuc #mapux #gisux
it’s a jungle out there!




                           #uxmaptouchapp #esriuc #mapux #gisux
it’s a jungle out there!




                                               Touch


                           #uxmaptouchapp #esriuc #mapux #gisux
touch = mouseless




             #uxmaptouchapp #esriuc #mapux #gisux
Device challenges

 Viewports

 Interaction

 Processors/speed

 Connectivity




                    #uxmaptouchapp #esriuc #mapux #gisux
Viewports - Resolution/Orientation

 1024, 768,480,320

 Rotation, orientation

 UX
   • Handling physical device
   • Large screen size = small buttons (OK!)
   • Small screen size = big buttons (challenge!)
   • Glare, fingerprints…




                                    #uxmaptouchapp #esriuc #mapux #gisux
Interaction - Keyboard vs mouse vs touch

 •   Physical differences… / Input

 •   Form factor

 •   UX
     • Click vs tap vs voice
     • Mouse cursor vs direct interaction (finger)
     • Keyboard shortcuts vs gestures
     • Right-click, mouse over (don’t exist)




                                      #uxmaptouchapp #esriuc #mapux #gisux
Processor Speed & Connectivity

 -   Connected & Disconnected

 -   Wifi vs mobile

 -   UX
     - user feedback one when connection status
     - too slow due to connection speed
     - out of memory/memory limitations




                                    #uxmaptouchapp #esriuc #mapux #gisux
Mapping dev challenges

 Mouse vs touch events

 Mouse vs touch vs mapping events

 Usability




                            #uxmaptouchapp #esriuc #mapux #gisux
So where do I start?




               #uxmaptouchapp #esriuc #mapux #gisux
Think mobile first




              #uxmaptouchapp #esriuc #mapux #gisux
Think relevance




            #uxmaptouchapp #esriuc #mapux #gisux
Think simple




          #uxmaptouchapp #esriuc #mapux #gisux
Think reusable (content)




                #uxmaptouchapp #esriuc #mapux #gisux
Think “responsive”




             #uxmaptouchapp #esriuc #mapux #gisux
Your app running everywhere…




                       #uxmaptouchapp #esriuc #mapux #gisux
Plan/design for each device
What is most relevant?




                              #uxmaptouchapp #esriuc #mapux #gisux
Mock-up first (mobile, tablet & desktop)




                           #uxmaptouchapp #esriuc #mapux #gisux
Use case: Javascript Dev Starter App

     Web app


     Touch


     Responsive


     Good UX




                              #uxmaptouchapp #esriuc #mapux #gisux
Dev solutions, thinking responsive...

  Touch

  Fluid layout (960 grid)

  Media Queries – screen, print, handheld

  Smart css




                              #uxmaptouchapp #esriuc #mapux #gisux
Touch

 Minimum “press-able” area 36px x 36px

 Keep “press-able” elements away from edges

 No right-click & hover / mouse-over for touch

 Avoid the "double tap"

 Gestures should be used as shortcuts


                             #uxmaptouchapp #esriuc #mapux #gisux
Fluid Explained…

 Percentage based widths

 960 grid system (www.960.gs)


                            grid_16



          grid_5                      grid_11



                   grid_8                   grid_8



                                      #uxmaptouchapp #esriuc #mapux #gisux
Media Query

   @media
     @media all and ( min-width : 768px ) and ( max-width : 1024px ) and
         ( orientation : portrait ) { … }                                /* Tablet - Portrait */


     @media all and ( min-width: 768px ) and ( max-width : 1024px ) and
         (max-height : 768px) and ( orientation : landscape ) { … }         /* Tablet - Landscape */


     @media all and ( min-width: 321px ) and ( max-width: 480px ) { … }     /* Smartphone - Landscape */


     @media all and ( max-width: 320px ) { … }                              /* Smartphone - Portrait */


     @media all and ( min-width: 800px ) and ( min-height: 800px ) and
         ( max-width: 1279px ) { … }                                        /* Desktop */


     @media all and ( min-width : 1280px ) { … }                            /* Desktop - Wide Screen */


Resource: http://css-tricks.com/snippets/css/media-queries-for-standard-devices/

                                                                  #uxmaptouchapp #esriuc #mapux #gisux
Smart CSS
    <body class = “ … ” >

    “ui_iOS ui_iOS_iPhone”      “ui_Android ui_AndroidPhone”      “ui_Win ui_Win7_Phone”




Same HTML with different CSS applied

                                                       #uxmaptouchapp #esriuc #mapux #gisux
Mobile browser challenges…




Tool bars take up space too!



                               #uxmaptouchapp #esriuc #mapux #gisux
Touch-friendly dev




             #uxmaptouchapp #esriuc #mapux #gisux
ArcGIS Javascript Compact


<script
type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0compact">
</script




                                                       #uxmaptouchapp #esriuc #mapux #gisux
Viewport and orientation

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
     user-scalable=no"/>
…

"autoResize": function ( window ) {
  var supportsOrientationChange = "onorientationchange" in window,
       orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";

     function orientationChanged( map ) {
       if (map) {
           map.resize();
           map.reposition();
       }
     }

     // Attach
     if ( window.addEventListener )
         window.addEventListener( orientationEvent, function () { orientationChanged(map); }, false );
},




                                                                #uxmaptouchapp #esriuc #mapux #gisux
Device detection
var mobileDevice = {
  Android: function () {
     return navigator.userAgent.match(/Android/i) ? true : false;
  },
  BlackBerry: function () {
     return navigator.userAgent.match(/BlackBerry/i) ? true : false;
  },
  iPhone: function () {
     return navigator.userAgent.match(/iPhone|iPod/i) ? true : false;
  },
  iPad: function () {
     return navigator.userAgent.match(/iPad/i) ? true : false;
  },
  Windows: function () {
     return navigator.userAgent.match(/IEMobile/i) ? true : false;
  },
  any: function () {
     return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iPhone() || isMobile.iPad()
              || isMobile.Windows());
  }




                                                               #uxmaptouchapp #esriuc #mapux #gisux
Events: onclick vs ontouchstart

 <button id="addPoint" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button>

 <button id="addLine" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button>

 <button id="addPolygon" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button>

 <button id="clearGraphics" class="buttonControls" onclick="setActiveTool(this);"
 ontouchstart ="setActiveTool(null);"><span class="buttonLabel">Add Point</span></button>




                   onmousedown + onclick = ontouchstart

                   ontouchstart != onmousedown || onclick



                                                         #uxmaptouchapp #esriuc #mapux #gisux
Events: No onmouseover (hover)

<div id="containerMenu" class="">

         <div id="basemaps" class="buttonNav selected" onmouseover="setActiveModule( this, true );"
                ontouchstart="setActiveModule( this, true );"><p>Basemaps</p></div>

         <div id="geolocation" class="buttonNav" onmouseover="setActiveModule( this, true );"
                ontouchstart ="setActiveModule( this, true );"><p>Geolocation</p></div>

         <div id="graphics" class="buttonNav" onmouseover="setActiveModule( this, true );"
                ontouchstart ="setActiveModule( this, false );"><p>Add Graphics</p></div>

         <div id="findAddress" class="buttonNav" onmouseover="setActiveModule( this, true );"
                ontouchstart ="setActiveModule( this, true );"><p>Find Place</p></div>
         …

</div>




                                                            #uxmaptouchapp #esriuc #mapux #gisux
Events: No doubleclick
function addGraphicCallback( evt ) {

      var pt = evt.mapPoint;
      clearAddGraphics( false );

      var finished = ( evt.type == "dblclick" || evt.type == "touchend“ );

      switch ( activeToolId )
      {
            case 'addPoint':
               addPoint( pt, finished );
               break;
            case 'addLine':
               addLine( pt, finished );
               break;
            case 'addPolygon':
               addPolygon( pt, finished );
               break;
            default:
      }
}



                                                              #uxmaptouchapp #esriuc #mapux #gisux
Locking map navigation

function setActiveTool ( ctrl, active) {
   lockMapNavigation( active );
   …
}

function lockMapNavigation( lock ) {

     if ( lock ) {
         map.disableDoubleClickZoom();
         map.disableClickRecenter();
         map.disablePan();
     } else {
         map.enableDoubleClickZoom();
         map.enableClickRecenter();
         map.enablePan();
     }

 }




                                           #uxmaptouchapp #esriuc #mapux #gisux
Final UX thoughts
Toggle - turn tools on and off (expected)

Guide your user
   - “just-in-time-assistance” (user message)

Give them a way to “back-out”




                                   #uxmaptouchapp #esriuc #mapux #gisux
Remember the “Javascript Dev Starter App”?




                             #uxmaptouchapp #esriuc #mapux #gisux
Grand Finale




http://edn1.esri.com/starterapp/



                          #uxmaptouchapp #esriuc #mapux #gisux
In the end…


               Design for touch

              Design for devices

              Design for the user!



               There are challenges!



                                 #uxmaptouchapp #esriuc #mapux #gisux
Questions?

Allan Laframboise        Frank Garofalo
.NET Technical Lead,     UI / Human Factors Engineer,
Esri Developer Network   Esri Professional Services

@Al_Laframboise          @fgarofalo




                           #uxmaptouchapp #esriuc #mapux #gisux
Questions?

Allan Laframboise                Frank Garofalo
.NET Technical Lead,             UI / Human Factors Engineer,
Esri Developer Network           Esri Professional Services

@Al_Laframboise                  @fgarofalo



         http://edn1.esri.com/starterapp/



                                   #uxmaptouchapp #esriuc #mapux #gisux
Today’s feature presentation…


 Apps need to run everywhere

 UX considerations

 Dev solutions




                           #uxmaptouchapp #esriuc #mapux #gisux
Things to think about




               #uxmaptouchapp #esriuc #mapux #gisux

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Look at UI/UX Design Process
Look at UI/UX Design ProcessLook at UI/UX Design Process
Look at UI/UX Design Process
 
10 PowerPoint Hacks to Make Your Decks a Little Less Sucky
10 PowerPoint Hacks to Make Your Decks a Little Less Sucky 10 PowerPoint Hacks to Make Your Decks a Little Less Sucky
10 PowerPoint Hacks to Make Your Decks a Little Less Sucky
 
LinkedIn SlideShare's Upload Campaign Calendar: 2016
LinkedIn SlideShare's Upload Campaign Calendar: 2016LinkedIn SlideShare's Upload Campaign Calendar: 2016
LinkedIn SlideShare's Upload Campaign Calendar: 2016
 
Research Portfolio - Josh LaMar
Research Portfolio - Josh LaMarResearch Portfolio - Josh LaMar
Research Portfolio - Josh LaMar
 
Agile-User Experience Design: an Agile and User-Centered Process?
Agile-User Experience Design: an Agile and User-Centered Process?Agile-User Experience Design: an Agile and User-Centered Process?
Agile-User Experience Design: an Agile and User-Centered Process?
 
Don't Make me Think - Book Summary
Don't Make me Think - Book Summary Don't Make me Think - Book Summary
Don't Make me Think - Book Summary
 
Standardizing Product Design Metrics (Jennifer Cardello at Enterprise UX 2018)
Standardizing Product Design Metrics (Jennifer Cardello at Enterprise UX 2018)Standardizing Product Design Metrics (Jennifer Cardello at Enterprise UX 2018)
Standardizing Product Design Metrics (Jennifer Cardello at Enterprise UX 2018)
 
User Experience: A Lean UX Process
User Experience: A Lean UX ProcessUser Experience: A Lean UX Process
User Experience: A Lean UX Process
 
UX & Design Riyadh: Usability Guidelines for Websites & Mobile Apps
UX & Design Riyadh: Usability Guidelines for Websites & Mobile AppsUX & Design Riyadh: Usability Guidelines for Websites & Mobile Apps
UX & Design Riyadh: Usability Guidelines for Websites & Mobile Apps
 
Good UX Bad UX
Good UX Bad UXGood UX Bad UX
Good UX Bad UX
 
Usability Testing Report Template
Usability Testing Report TemplateUsability Testing Report Template
Usability Testing Report Template
 
Web UI Best Practices.ppt
Web UI Best Practices.pptWeb UI Best Practices.ppt
Web UI Best Practices.ppt
 
UX 101: A quick & dirty introduction to user experience strategy & design
UX 101: A quick & dirty introduction to user experience strategy & designUX 101: A quick & dirty introduction to user experience strategy & design
UX 101: A quick & dirty introduction to user experience strategy & design
 
Audyt UX metodą wędrówki poznawczej
Audyt UX metodą wędrówki poznawczejAudyt UX metodą wędrówki poznawczej
Audyt UX metodą wędrówki poznawczej
 
How to measure content effectiveness
How to measure content effectivenessHow to measure content effectiveness
How to measure content effectiveness
 
Google UX Design Course - Portfolio Project 1 - App Design for a Fictional St...
Google UX Design Course - Portfolio Project 1 - App Design for a Fictional St...Google UX Design Course - Portfolio Project 1 - App Design for a Fictional St...
Google UX Design Course - Portfolio Project 1 - App Design for a Fictional St...
 
UI & UX Design for Startups
UI & UX Design for StartupsUI & UX Design for Startups
UI & UX Design for Startups
 
Design System 101
Design System 101Design System 101
Design System 101
 
Sortowanie Kart Symetria Natalia Bednarz
Sortowanie Kart Symetria Natalia BednarzSortowanie Kart Symetria Natalia Bednarz
Sortowanie Kart Symetria Natalia Bednarz
 
What is UX?
What is UX?What is UX?
What is UX?
 

Andere mochten auch

Usability Testing: Understanding End-Users through Observation
Usability Testing: Understanding End-Users through ObservationUsability Testing: Understanding End-Users through Observation
Usability Testing: Understanding End-Users through Observation
Frank Garofalo
 
Ideation 6-8-5 activity
Ideation 6-8-5 activityIdeation 6-8-5 activity
Ideation 6-8-5 activity
Frank Garofalo
 
Ideation6 8-5 activity
Ideation6 8-5 activityIdeation6 8-5 activity
Ideation6 8-5 activity
Frank Garofalo
 
Storyboarding for the User Experience: It's like building a house
Storyboarding for the User Experience: It's like building a houseStoryboarding for the User Experience: It's like building a house
Storyboarding for the User Experience: It's like building a house
Frank Garofalo
 
Game Design Thinking for the Enterprise
Game Design Thinking for the EnterpriseGame Design Thinking for the Enterprise
Game Design Thinking for the Enterprise
Ann DeMarle
 

Andere mochten auch (20)

Usability Testing: Understanding End-Users through Observation
Usability Testing: Understanding End-Users through ObservationUsability Testing: Understanding End-Users through Observation
Usability Testing: Understanding End-Users through Observation
 
It's a Mobile and Touch World
It's a Mobile and Touch WorldIt's a Mobile and Touch World
It's a Mobile and Touch World
 
Ideation 6-8-5 activity
Ideation 6-8-5 activityIdeation 6-8-5 activity
Ideation 6-8-5 activity
 
UX: More than a Buzz Word
UX: More than a Buzz WordUX: More than a Buzz Word
UX: More than a Buzz Word
 
Users' Story: UX Storyboarding
Users' Story: UX StoryboardingUsers' Story: UX Storyboarding
Users' Story: UX Storyboarding
 
UX Design for Developers
UX Design for DevelopersUX Design for Developers
UX Design for Developers
 
Ideation6 8-5 activity
Ideation6 8-5 activityIdeation6 8-5 activity
Ideation6 8-5 activity
 
DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 2 of 2)
DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 2 of 2)DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 2 of 2)
DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 2 of 2)
 
"It's a Mobile & Touch World" Lightning Talk
"It's a Mobile & Touch World" Lightning Talk"It's a Mobile & Touch World" Lightning Talk
"It's a Mobile & Touch World" Lightning Talk
 
Pitch & Critique - Feedback
Pitch & Critique - FeedbackPitch & Critique - Feedback
Pitch & Critique - Feedback
 
Storyboarding for the User Experience: It's like building a house
Storyboarding for the User Experience: It's like building a houseStoryboarding for the User Experience: It's like building a house
Storyboarding for the User Experience: It's like building a house
 
UX Strategy OneSheet
UX Strategy OneSheetUX Strategy OneSheet
UX Strategy OneSheet
 
Storyboarding levels
Storyboarding levelsStoryboarding levels
Storyboarding levels
 
The Power of Layering Multiple Interactive Data Sets
The Power of Layering Multiple Interactive Data SetsThe Power of Layering Multiple Interactive Data Sets
The Power of Layering Multiple Interactive Data Sets
 
How to "Do" Lean UX in 5 Easy Steps
How to "Do" Lean UX in 5 Easy StepsHow to "Do" Lean UX in 5 Easy Steps
How to "Do" Lean UX in 5 Easy Steps
 
Lean UX: Getting out of the deliverables business
Lean UX: Getting out of the deliverables businessLean UX: Getting out of the deliverables business
Lean UX: Getting out of the deliverables business
 
DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 1 of 2)
DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 1 of 2)DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 1 of 2)
DevSummit 2016 PreSummit Workshop: Getting to Know Your Users (Part 1 of 2)
 
MOBILE INTERACTION PATTERNS AND NON PATTERNS
MOBILE INTERACTION PATTERNS AND NON PATTERNSMOBILE INTERACTION PATTERNS AND NON PATTERNS
MOBILE INTERACTION PATTERNS AND NON PATTERNS
 
Game Design Thinking for the Enterprise
Game Design Thinking for the EnterpriseGame Design Thinking for the Enterprise
Game Design Thinking for the Enterprise
 
Always-on research
Always-on researchAlways-on research
Always-on research
 

Ähnlich wie UX Considerations for Mapping Apps on Touch Devices

Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Patrick Lauke
 
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Esri Nederland
 

Ähnlich wie UX Considerations for Mapping Apps on Touch Devices (20)

2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
 
@Ionic native/google-maps
@Ionic native/google-maps@Ionic native/google-maps
@Ionic native/google-maps
 
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
 
3 Approaches to Mobile - An A to Z Primer.
3 Approaches to Mobile - An A to Z Primer.3 Approaches to Mobile - An A to Z Primer.
3 Approaches to Mobile - An A to Z Primer.
 
WebGL, HTML5 and How the Mobile Web Was Won
WebGL, HTML5 and How the Mobile Web Was WonWebGL, HTML5 and How the Mobile Web Was Won
WebGL, HTML5 and How the Mobile Web Was Won
 
Gup web mobilegis
Gup web mobilegisGup web mobilegis
Gup web mobilegis
 
Android 3
Android 3Android 3
Android 3
 
KODE JS POKENNNNN
KODE JS POKENNNNNKODE JS POKENNNNN
KODE JS POKENNNNN
 
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
 
Mobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptMobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScript
 
Location Based Services Without the Cocoa
Location Based Services Without the CocoaLocation Based Services Without the Cocoa
Location Based Services Without the Cocoa
 
JQuery Flot
JQuery FlotJQuery Flot
JQuery Flot
 
mobl
moblmobl
mobl
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
 
Building responsive web mobile mapping applications
Building responsive web mobile mapping applicationsBuilding responsive web mobile mapping applications
Building responsive web mobile mapping applications
 
Developing AIR for Android with Flash Professional
Developing AIR for Android with Flash ProfessionalDeveloping AIR for Android with Flash Professional
Developing AIR for Android with Flash Professional
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGL
 
Measuring Continuity
Measuring ContinuityMeasuring Continuity
Measuring Continuity
 

Mehr von Frank Garofalo

Mehr von Frank Garofalo (20)

Resident Engagement Focus to Increasing Productivity and Efficiency - ACUHO-I...
Resident Engagement Focus to Increasing Productivity and Efficiency - ACUHO-I...Resident Engagement Focus to Increasing Productivity and Efficiency - ACUHO-I...
Resident Engagement Focus to Increasing Productivity and Efficiency - ACUHO-I...
 
Toolkit Workshop: Learn Methods and Techniques for Understanding your Target ...
Toolkit Workshop: Learn Methods and Techniques for Understanding your Target ...Toolkit Workshop: Learn Methods and Techniques for Understanding your Target ...
Toolkit Workshop: Learn Methods and Techniques for Understanding your Target ...
 
San Diego Startup Week 2019 Idea Track Lightning Talk Wed May 29
San Diego Startup Week 2019 Idea Track Lightning Talk Wed May 29San Diego Startup Week 2019 Idea Track Lightning Talk Wed May 29
San Diego Startup Week 2019 Idea Track Lightning Talk Wed May 29
 
Garofalo UX: Training
Garofalo UX: TrainingGarofalo UX: Training
Garofalo UX: Training
 
Pitch and Critique Method
Pitch and Critique MethodPitch and Critique Method
Pitch and Critique Method
 
Idea Generation and Evaluation Workshop
Idea Generation and Evaluation WorkshopIdea Generation and Evaluation Workshop
Idea Generation and Evaluation Workshop
 
Garofalo UX - Portfolio 2018
Garofalo UX - Portfolio 2018Garofalo UX - Portfolio 2018
Garofalo UX - Portfolio 2018
 
Startup San Diego - Volunteer Onboarding 2018 (v2)
Startup San Diego - Volunteer Onboarding 2018 (v2)Startup San Diego - Volunteer Onboarding 2018 (v2)
Startup San Diego - Volunteer Onboarding 2018 (v2)
 
The Business of UX - Being a Designer Is Not Enough
The Business of UX - Being a Designer Is Not EnoughThe Business of UX - Being a Designer Is Not Enough
The Business of UX - Being a Designer Is Not Enough
 
Ideas, Human Experience, & ROI
Ideas, Human Experience, & ROIIdeas, Human Experience, & ROI
Ideas, Human Experience, & ROI
 
ROI + Brainstorming
ROI + BrainstormingROI + Brainstorming
ROI + Brainstorming
 
Esri User Conference 2016 - UX & UI activities
Esri User Conference 2016 - UX & UI activitiesEsri User Conference 2016 - UX & UI activities
Esri User Conference 2016 - UX & UI activities
 
User Experience (UX) & User Interface (UI) Exchange 2016
User Experience (UX) & User Interface (UI) Exchange 2016User Experience (UX) & User Interface (UI) Exchange 2016
User Experience (UX) & User Interface (UI) Exchange 2016
 
Esri DevSummit 2016 - Journey Canvas:
Esri DevSummit 2016 - Journey Canvas: Esri DevSummit 2016 - Journey Canvas:
Esri DevSummit 2016 - Journey Canvas:
 
Purdue GIS Day 2015 Keynote - It's All About the Journey
Purdue GIS Day 2015 Keynote - It's All About the JourneyPurdue GIS Day 2015 Keynote - It's All About the Journey
Purdue GIS Day 2015 Keynote - It's All About the Journey
 
Purdue GIS Day 2015 - Ideation Workshop
Purdue GIS Day 2015 - Ideation WorkshopPurdue GIS Day 2015 - Ideation Workshop
Purdue GIS Day 2015 - Ideation Workshop
 
The Art of User Experience: Methodologies Around Designing Great Apps
The Art of User Experience: Methodologies Around Designing Great AppsThe Art of User Experience: Methodologies Around Designing Great Apps
The Art of User Experience: Methodologies Around Designing Great Apps
 
Brainstorming in an Agile World, present- Esri UC 2015
Brainstorming in an Agile World, present- Esri UC 2015Brainstorming in an Agile World, present- Esri UC 2015
Brainstorming in an Agile World, present- Esri UC 2015
 
UX & UI Exchange 2015
UX & UI Exchange 2015UX & UI Exchange 2015
UX & UI Exchange 2015
 
Brainstorming in an Agile World (Esri DevSummit 2015)
Brainstorming in an Agile World (Esri DevSummit 2015)Brainstorming in an Agile World (Esri DevSummit 2015)
Brainstorming in an Agile World (Esri DevSummit 2015)
 

Kürzlich hochgeladen

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Kürzlich hochgeladen (20)

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

UX Considerations for Mapping Apps on Touch Devices

  • 1. UX Considerations for Mapping Apps on Touch Devices “Touch-friendly mapping apps” Allan Laframboise Frank Garofalo #uxmaptouchapp #esriuc #mapux #gisux
  • 2. So you’ve got a web mapping app… #uxmaptouchapp #esriuc #mapux #gisux
  • 3. So you’ve got a web mapping app… …is it usable on a touch device? #uxmaptouchapp #esriuc #mapux #gisux
  • 5.
  • 6. Why? #uxmaptouchapp #esriuc #mapux #gisux
  • 7. Time Design Cost Knowledge Standards Technical Limitations #uxmaptouchapp #esriuc #mapux #gisux
  • 8. it’s a jungle out there! #uxmaptouchapp #esriuc #mapux #gisux
  • 9. it’s a jungle out there! Touch #uxmaptouchapp #esriuc #mapux #gisux
  • 10. touch = mouseless #uxmaptouchapp #esriuc #mapux #gisux
  • 11. Device challenges Viewports Interaction Processors/speed Connectivity #uxmaptouchapp #esriuc #mapux #gisux
  • 12. Viewports - Resolution/Orientation 1024, 768,480,320 Rotation, orientation UX • Handling physical device • Large screen size = small buttons (OK!) • Small screen size = big buttons (challenge!) • Glare, fingerprints… #uxmaptouchapp #esriuc #mapux #gisux
  • 13. Interaction - Keyboard vs mouse vs touch • Physical differences… / Input • Form factor • UX • Click vs tap vs voice • Mouse cursor vs direct interaction (finger) • Keyboard shortcuts vs gestures • Right-click, mouse over (don’t exist) #uxmaptouchapp #esriuc #mapux #gisux
  • 14. Processor Speed & Connectivity - Connected & Disconnected - Wifi vs mobile - UX - user feedback one when connection status - too slow due to connection speed - out of memory/memory limitations #uxmaptouchapp #esriuc #mapux #gisux
  • 15. Mapping dev challenges Mouse vs touch events Mouse vs touch vs mapping events Usability #uxmaptouchapp #esriuc #mapux #gisux
  • 16. So where do I start? #uxmaptouchapp #esriuc #mapux #gisux
  • 17. Think mobile first #uxmaptouchapp #esriuc #mapux #gisux
  • 18. Think relevance #uxmaptouchapp #esriuc #mapux #gisux
  • 19. Think simple #uxmaptouchapp #esriuc #mapux #gisux
  • 20. Think reusable (content) #uxmaptouchapp #esriuc #mapux #gisux
  • 21. Think “responsive” #uxmaptouchapp #esriuc #mapux #gisux
  • 22. Your app running everywhere… #uxmaptouchapp #esriuc #mapux #gisux
  • 23. Plan/design for each device What is most relevant? #uxmaptouchapp #esriuc #mapux #gisux
  • 24. Mock-up first (mobile, tablet & desktop) #uxmaptouchapp #esriuc #mapux #gisux
  • 25. Use case: Javascript Dev Starter App  Web app  Touch  Responsive  Good UX #uxmaptouchapp #esriuc #mapux #gisux
  • 26. Dev solutions, thinking responsive... Touch Fluid layout (960 grid) Media Queries – screen, print, handheld Smart css #uxmaptouchapp #esriuc #mapux #gisux
  • 27. Touch Minimum “press-able” area 36px x 36px Keep “press-able” elements away from edges No right-click & hover / mouse-over for touch Avoid the "double tap" Gestures should be used as shortcuts #uxmaptouchapp #esriuc #mapux #gisux
  • 28. Fluid Explained… Percentage based widths 960 grid system (www.960.gs) grid_16 grid_5 grid_11 grid_8 grid_8 #uxmaptouchapp #esriuc #mapux #gisux
  • 29. Media Query @media @media all and ( min-width : 768px ) and ( max-width : 1024px ) and ( orientation : portrait ) { … } /* Tablet - Portrait */ @media all and ( min-width: 768px ) and ( max-width : 1024px ) and (max-height : 768px) and ( orientation : landscape ) { … } /* Tablet - Landscape */ @media all and ( min-width: 321px ) and ( max-width: 480px ) { … } /* Smartphone - Landscape */ @media all and ( max-width: 320px ) { … } /* Smartphone - Portrait */ @media all and ( min-width: 800px ) and ( min-height: 800px ) and ( max-width: 1279px ) { … } /* Desktop */ @media all and ( min-width : 1280px ) { … } /* Desktop - Wide Screen */ Resource: http://css-tricks.com/snippets/css/media-queries-for-standard-devices/ #uxmaptouchapp #esriuc #mapux #gisux
  • 30. Smart CSS <body class = “ … ” > “ui_iOS ui_iOS_iPhone” “ui_Android ui_AndroidPhone” “ui_Win ui_Win7_Phone” Same HTML with different CSS applied #uxmaptouchapp #esriuc #mapux #gisux
  • 31. Mobile browser challenges… Tool bars take up space too! #uxmaptouchapp #esriuc #mapux #gisux
  • 32. Touch-friendly dev #uxmaptouchapp #esriuc #mapux #gisux
  • 33. ArcGIS Javascript Compact <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0compact"> </script #uxmaptouchapp #esriuc #mapux #gisux
  • 34. Viewport and orientation <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/> … "autoResize": function ( window ) { var supportsOrientationChange = "onorientationchange" in window, orientationEvent = supportsOrientationChange ? "orientationchange" : "resize"; function orientationChanged( map ) { if (map) { map.resize(); map.reposition(); } } // Attach if ( window.addEventListener ) window.addEventListener( orientationEvent, function () { orientationChanged(map); }, false ); }, #uxmaptouchapp #esriuc #mapux #gisux
  • 35. Device detection var mobileDevice = { Android: function () { return navigator.userAgent.match(/Android/i) ? true : false; }, BlackBerry: function () { return navigator.userAgent.match(/BlackBerry/i) ? true : false; }, iPhone: function () { return navigator.userAgent.match(/iPhone|iPod/i) ? true : false; }, iPad: function () { return navigator.userAgent.match(/iPad/i) ? true : false; }, Windows: function () { return navigator.userAgent.match(/IEMobile/i) ? true : false; }, any: function () { return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iPhone() || isMobile.iPad() || isMobile.Windows()); } #uxmaptouchapp #esriuc #mapux #gisux
  • 36. Events: onclick vs ontouchstart <button id="addPoint" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button> <button id="addLine" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button> <button id="addPolygon" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(this);"><span class="buttonLabel">Add Point</span></button> <button id="clearGraphics" class="buttonControls" onclick="setActiveTool(this);" ontouchstart ="setActiveTool(null);"><span class="buttonLabel">Add Point</span></button> onmousedown + onclick = ontouchstart ontouchstart != onmousedown || onclick #uxmaptouchapp #esriuc #mapux #gisux
  • 37. Events: No onmouseover (hover) <div id="containerMenu" class=""> <div id="basemaps" class="buttonNav selected" onmouseover="setActiveModule( this, true );" ontouchstart="setActiveModule( this, true );"><p>Basemaps</p></div> <div id="geolocation" class="buttonNav" onmouseover="setActiveModule( this, true );" ontouchstart ="setActiveModule( this, true );"><p>Geolocation</p></div> <div id="graphics" class="buttonNav" onmouseover="setActiveModule( this, true );" ontouchstart ="setActiveModule( this, false );"><p>Add Graphics</p></div> <div id="findAddress" class="buttonNav" onmouseover="setActiveModule( this, true );" ontouchstart ="setActiveModule( this, true );"><p>Find Place</p></div> … </div> #uxmaptouchapp #esriuc #mapux #gisux
  • 38. Events: No doubleclick function addGraphicCallback( evt ) { var pt = evt.mapPoint; clearAddGraphics( false ); var finished = ( evt.type == "dblclick" || evt.type == "touchend“ ); switch ( activeToolId ) { case 'addPoint': addPoint( pt, finished ); break; case 'addLine': addLine( pt, finished ); break; case 'addPolygon': addPolygon( pt, finished ); break; default: } } #uxmaptouchapp #esriuc #mapux #gisux
  • 39. Locking map navigation function setActiveTool ( ctrl, active) { lockMapNavigation( active ); … } function lockMapNavigation( lock ) { if ( lock ) { map.disableDoubleClickZoom(); map.disableClickRecenter(); map.disablePan(); } else { map.enableDoubleClickZoom(); map.enableClickRecenter(); map.enablePan(); } } #uxmaptouchapp #esriuc #mapux #gisux
  • 40. Final UX thoughts Toggle - turn tools on and off (expected) Guide your user - “just-in-time-assistance” (user message) Give them a way to “back-out” #uxmaptouchapp #esriuc #mapux #gisux
  • 41. Remember the “Javascript Dev Starter App”? #uxmaptouchapp #esriuc #mapux #gisux
  • 42. Grand Finale http://edn1.esri.com/starterapp/ #uxmaptouchapp #esriuc #mapux #gisux
  • 43. In the end… Design for touch Design for devices Design for the user! There are challenges! #uxmaptouchapp #esriuc #mapux #gisux
  • 44. Questions? Allan Laframboise Frank Garofalo .NET Technical Lead, UI / Human Factors Engineer, Esri Developer Network Esri Professional Services @Al_Laframboise @fgarofalo #uxmaptouchapp #esriuc #mapux #gisux
  • 45. Questions? Allan Laframboise Frank Garofalo .NET Technical Lead, UI / Human Factors Engineer, Esri Developer Network Esri Professional Services @Al_Laframboise @fgarofalo http://edn1.esri.com/starterapp/ #uxmaptouchapp #esriuc #mapux #gisux
  • 46.
  • 47. Today’s feature presentation… Apps need to run everywhere UX considerations Dev solutions #uxmaptouchapp #esriuc #mapux #gisux
  • 48. Things to think about #uxmaptouchapp #esriuc #mapux #gisux