SlideShare a Scribd company logo
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
UX Considerations for Touch Mapping Apps
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 devices

               Design for touch

              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
UX Considerations for Touch Mapping Apps

More Related Content

PPTX
UX Design for Developers
PDF
UX Considerations for Mapping Apps on Touch Devices
PDF
"It's a Mobile & Touch World" Lightning Talk
PDF
It's a Mobile and Touch World
KEY
Yui mobile
KEY
YUI for Mobile - HTML5DevConf 11
PDF
GitHub + Mapping Apps in 100 lines or less using the ArcGIS API for JavaScript
PDF
Esri open source projects on GitHub
UX Design for Developers
UX Considerations for Mapping Apps on Touch Devices
"It's a Mobile & Touch World" Lightning Talk
It's a Mobile and Touch World
Yui mobile
YUI for Mobile - HTML5DevConf 11
GitHub + Mapping Apps in 100 lines or less using the ArcGIS API for JavaScript
Esri open source projects on GitHub

Viewers also liked (6)

PDF
Application devevelopment with open source libraries
PDF
Where are you with gis and geolocation
PDF
Building responsive web mobile mapping applications
PDF
Esri Map App Builders
PDF
THEME – 1 Geoinformatics and Genetic Resources under Changing Climate
PDF
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Application devevelopment with open source libraries
Where are you with gis and geolocation
Building responsive web mobile mapping applications
Esri Map App Builders
THEME – 1 Geoinformatics and Genetic Resources under Changing Climate
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Ad

Similar to UX Considerations for Touch Mapping Apps (20)

PPTX
3 Approaches to Mobile - An A to Z Primer.
PDF
Gup web mobilegis
PPTX
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
PDF
Building Mobile Cross-Platform Geospatial Apps, Nick Landry
PPTX
Migrating from Desktop to Mobile
PDF
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
PDF
Publishing on ArcGIS Mobile
PPT
An Overview of Web GIS and Location Based Services
PPT
Location Based Services Without the Cocoa
PPTX
What’s in my mobile geo toolkit? by @gingemonster
PDF
Map visualisation
PDF
Working with the Boundless SDK to design and create web mapping applications
PPTX
Getting Started with the ArcGIS API for JavaScript, Esri, Julie Powell, Antoo...
PDF
Web Editing in ArcGIS Server
PDF
Specialist-ArcGIS-Server-API-3.x-and-4-for-JavaScript.pdf
ODP
Map Scripting With Style
KEY
Developing iOS Map Applications with C#
PPT
Web enabling your survey business ppt version
PDF
Batty consumerization of geospatial
PPTX
Creating Apps with Maps in AppStudio - Esri User Conference 2015 Presentation
3 Approaches to Mobile - An A to Z Primer.
Gup web mobilegis
Building mobile apps with the ArcGIS api for Javascript, Esri, Andy Gup and A...
Building Mobile Cross-Platform Geospatial Apps, Nick Landry
Migrating from Desktop to Mobile
2013 URISA Track, Kickstarter for JavaScript Web and Mobile GIS Development b...
Publishing on ArcGIS Mobile
An Overview of Web GIS and Location Based Services
Location Based Services Without the Cocoa
What’s in my mobile geo toolkit? by @gingemonster
Map visualisation
Working with the Boundless SDK to design and create web mapping applications
Getting Started with the ArcGIS API for JavaScript, Esri, Julie Powell, Antoo...
Web Editing in ArcGIS Server
Specialist-ArcGIS-Server-API-3.x-and-4-for-JavaScript.pdf
Map Scripting With Style
Developing iOS Map Applications with C#
Web enabling your survey business ppt version
Batty consumerization of geospatial
Creating Apps with Maps in AppStudio - Esri User Conference 2015 Presentation
Ad

More from Allan Laframboise (9)

PDF
Nutrition and Race Planning for Mountain Bikers
PDF
Building ArcGIS Mobile Solutions in the Cloud
PDF
Live on everest
PDF
Navteq Developer Days - ArcGIS + POI
PDF
Geo services, social media and gis applications - Live on Everest
PDF
Gis & Social Media Integration
PDF
Social #WebApps - Ideas for developing GIS applications that are socially a ”...
PDF
What Is GIS?
PDF
GeoWeb Community Development: How Web 2.0 are you?
Nutrition and Race Planning for Mountain Bikers
Building ArcGIS Mobile Solutions in the Cloud
Live on everest
Navteq Developer Days - ArcGIS + POI
Geo services, social media and gis applications - Live on Everest
Gis & Social Media Integration
Social #WebApps - Ideas for developing GIS applications that are socially a ”...
What Is GIS?
GeoWeb Community Development: How Web 2.0 are you?

Recently uploaded (20)

PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
August Patch Tuesday
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Web App vs Mobile App What Should You Build First.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Mushroom cultivation and it's methods.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PPTX
A Presentation on Touch Screen Technology
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
Getting Started with Data Integration: FME Form 101
PDF
WOOl fibre morphology and structure.pdf for textiles
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
NewMind AI Weekly Chronicles - August'25-Week II
cloud_computing_Infrastucture_as_cloud_p
August Patch Tuesday
OMC Textile Division Presentation 2021.pptx
Web App vs Mobile App What Should You Build First.pdf
Programs and apps: productivity, graphics, security and other tools
Mushroom cultivation and it's methods.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Univ-Connecticut-ChatGPT-Presentaion.pdf
Unlocking AI with Model Context Protocol (MCP)
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
A Presentation on Touch Screen Technology
MIND Revenue Release Quarter 2 2025 Press Release
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
SOPHOS-XG Firewall Administrator PPT.pptx
Heart disease approach using modified random forest and particle swarm optimi...
Getting Started with Data Integration: FME Form 101
WOOl fibre morphology and structure.pdf for textiles
Zenith AI: Advanced Artificial Intelligence
NewMind AI Weekly Chronicles - August'25-Week II

UX Considerations for Touch Mapping Apps

  • 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
  • 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
  • 43. In the end… Design for devices Design for touch 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