SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
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 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

Contenu connexe

En vedette

Application devevelopment with open source libraries
Application devevelopment with open source librariesApplication devevelopment with open source libraries
Application devevelopment with open source librariesAllan Laframboise
 
Where are you with gis and geolocation
Where are you with gis and geolocationWhere are you with gis and geolocation
Where are you with gis and geolocationAllan Laframboise
 
Building responsive web mobile mapping applications
Building responsive web mobile mapping applicationsBuilding responsive web mobile mapping applications
Building responsive web mobile mapping applicationsAllan Laframboise
 
THEME – 1 Geoinformatics and Genetic Resources under Changing Climate
THEME – 1 Geoinformatics and Genetic Resources under Changing ClimateTHEME – 1 Geoinformatics and Genetic Resources under Changing Climate
THEME – 1 Geoinformatics and Genetic Resources under Changing ClimateICARDA
 
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to heroBuilding a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to hero
Building a ArcGIS mobile, cloud, checkin app in 75 minutes - zero to heroAllan Laframboise
 

En vedette (6)

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

Similaire à UX Considerations for Touch Mapping Apps

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...GIS in the Rockies
 
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
 
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.agup2009
 
KODE JS POKENNNNN
KODE JS POKENNNNNKODE JS POKENNNNN
KODE JS POKENNNNNPipo Atem
 
Mobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptMobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptfranksvalli
 
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 WonTony Parisi
 
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
 
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 AssetsAlessandro Molina
 
FINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile webFINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile webMaximiliano Firtman
 
Leaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLLeaving Flatland: getting started with WebGL
Leaving Flatland: getting started with WebGLgerbille
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?Ankara JUG
 
Sperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copySperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copySalvatore Iaconesi
 

Similaire à UX Considerations for Touch Mapping Apps (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.
 
KODE JS POKENNNNN
KODE JS POKENNNNNKODE JS POKENNNNN
KODE JS POKENNNNN
 
Gup web mobilegis
Gup web mobilegisGup web mobilegis
Gup web mobilegis
 
Android 3
Android 3Android 3
Android 3
 
Mobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScriptMobile HTML, CSS, and JavaScript
Mobile HTML, CSS, and JavaScript
 
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
 
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...
 
JQuery Flot
JQuery FlotJQuery Flot
JQuery Flot
 
mobl
moblmobl
mobl
 
Location Based Services Without the Cocoa
Location Based Services Without the CocoaLocation Based Services Without the Cocoa
Location Based Services Without the Cocoa
 
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
 
A More Flash Like Web?
A More Flash Like Web?A More Flash Like Web?
A More Flash Like Web?
 
FINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile webFINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile 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
 
HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?HTML5 - Daha Flash bir web?
HTML5 - Daha Flash bir web?
 
Sperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copySperimentazioni lezione6 from_designtoapplication copy
Sperimentazioni lezione6 from_designtoapplication copy
 

Plus de Allan Laframboise

Nutrition and Race Planning for Mountain Bikers
Nutrition and Race Planning for Mountain BikersNutrition and Race Planning for Mountain Bikers
Nutrition and Race Planning for Mountain BikersAllan Laframboise
 
Building ArcGIS Mobile Solutions in the Cloud
Building ArcGIS Mobile Solutions in the CloudBuilding ArcGIS Mobile Solutions in the Cloud
Building ArcGIS Mobile Solutions in the CloudAllan Laframboise
 
Navteq Developer Days - ArcGIS + POI
Navteq Developer Days - ArcGIS + POINavteq Developer Days - ArcGIS + POI
Navteq Developer Days - ArcGIS + POIAllan Laframboise
 
Geo services, social media and gis applications - Live on Everest
Geo services, social media and gis applications - Live on EverestGeo services, social media and gis applications - Live on Everest
Geo services, social media and gis applications - Live on EverestAllan Laframboise
 
Gis & Social Media Integration
Gis & Social Media IntegrationGis & Social Media Integration
Gis & Social Media IntegrationAllan Laframboise
 
Social #WebApps - Ideas for developing GIS applications that are socially a ”...
Social #WebApps - Ideas for developing GIS applications that are socially a ”...Social #WebApps - Ideas for developing GIS applications that are socially a ”...
Social #WebApps - Ideas for developing GIS applications that are socially a ”...Allan Laframboise
 
GeoWeb Community Development: How Web 2.0 are you?
GeoWeb Community Development: How Web 2.0 are you?GeoWeb Community Development: How Web 2.0 are you?
GeoWeb Community Development: How Web 2.0 are you?Allan Laframboise
 

Plus de Allan Laframboise (9)

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

Dernier

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
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 SavingEdi Saputra
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
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 FMESafe Software
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
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 businesspanagenda
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 

Dernier (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
+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...
 
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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
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
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

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
  • 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 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