Interaction Design
Overview
Interaction design focuses on how users engage with systems, creating intuitive and delightful experiences through feedback and responsiveness.
When to Use
- •Designing user flows and touchpoints
- •Creating animations and transitions
- •Defining error and loading states
- •Building microinteractions
- •Improving usability and feedback
- •Mobile interaction patterns
Instructions
1. Interaction Patterns
yaml
Common Interaction Patterns: Swipe: Use: Mobile lists, carousels Feedback: Visual sliding, momentum Accessibility: Keyboard alternative (arrows) Tap & Hold: Use: Context menus, drag prep Feedback: Visual feedback after delay Duration: ~500ms before trigger Pinch & Zoom: Use: Image viewing, maps Feedback: Smooth zoom animation Boundaries: Set min/max zoom levels Drag & Drop: Use: Reordering, moving items Feedback: Visual during drag, drop confirmation Fallback: Alternative method (buttons) Double Tap: Use: Zoom, favorite, select Feedback: Immediate visual response Conflict: Avoid 300ms delay confusion --- ## Microinteractions Loading States: - Show immediately for >0.5s waits - Animate progress bar for long waits - Show percentage for determinate progress - Skeleton screens for content Empty States: - Show friendly illustration - Explain what's empty - Provide action to fill (CTA) - Consider helpful suggestions Error States: - Clear error message (what, why, how to fix) - Highlight error field - Provide recovery action - Don't repeat error on retry Success Feedback: - Confirmation message (1-2 seconds) - Subtle animation or sound - Clear next step or action Pull-to-Refresh: - Familiar mobile pattern - Clear visual feedback during pull - Confirmation when complete - Alternative: Manual refresh button
2. Animation & Transition Design
python
# Define animations and transitions
class InteractionDesign:
def define_animation(self, interaction):
"""Specify animation properties"""
return {
'trigger': interaction.trigger, # Click, hover, load
'element': interaction.element,
'animation': {
'type': interaction.animation_type, # Fade, slide, scale
'duration': interaction.duration, # 200-400ms typical
'easing': interaction.easing_fn, # Ease-in-out
'delay': interaction.delay_ms
},
'purpose': interaction.purpose, # Feedback, guidance, delight
'platform': ['Desktop', 'Mobile'], # Platform-specific
'accessibility': {
'respects_prefers_reduced_motion': True,
'non_distract': 'Critical interactions only'
}
}
def define_transitions(self):
"""Page/screen transitions"""
return {
'navigation_forward': {
'animation': 'Slide right',
'duration': '300ms',
'easing': 'ease-out'
},
'navigation_back': {
'animation': 'Slide left',
'duration': '300ms',
'easing': 'ease-out'
},
'modal_open': {
'animation': 'Fade + Scale up',
'duration': '200ms',
'easing': 'ease-out'
},
'modal_close': {
'animation': 'Fade + Scale down',
'duration': '150ms',
'easing': 'ease-in'
}
}
def animation_guidelines(self):
"""Best practices for animation"""
return {
'duration': {
'micro_interactions': '100-200ms',
'transitions': '200-400ms',
'entrance_animations': '300-500ms',
'avoid': '>500ms (feels sluggish)'
},
'easing': {
'entrance': 'Ease out (fast start, slow end)',
'exit': 'Ease in (slow start, fast end)',
'focus': 'Ease-in-out for smooth feel'
},
'purpose': [
'Provide feedback',
'Guide user attention',
'Communicate state change',
'Delight users',
'Avoid: Distraction, slowness'
]
}
3. Error Handling & Feedback
yaml
Error State Design: Primary Error Message: "Payment declined" (clear, non-technical) Secondary Explanation: "Your card was declined by the bank. This might be due to insufficient funds, security concerns, or an expired card." Recovery Action: [ Retry Payment ] [ Use Different Card ] [ Contact Support ] Form Field Errors: - Highlight field with error color (red) - Show error icon - Place error message near field - Show error on blur, not on keystroke Form Validation: - Real-time validation for good UX - Server-side validation for security - Show success state after valid input - Clear error when corrected --- Success States: Confirmation Message: "Payment successful!" Duration: 2-3 seconds Action: Auto-dismiss or click to close Next Step: - Order confirmation email sent - What happens next? - Related actions Visual Feedback: - Check mark animation - Subtle celebration animation - Sound (optional, if enabled)
4. Accessibility in Interactions
javascript
// Ensure interactions are accessible
class AccessibleInteractions {
ensureKeyboardAccess() {
return {
tab_order: 'Logical, top-to-bottom',
focus_visible: 'Clear focus indicator (not removed)',
enter_key: 'Activates buttons and links',
space_key: 'Activates buttons',
escape_key: 'Closes modals and menus',
arrow_keys: 'Navigate lists, menus, carousels'
};
}
respectMotionPreferences() {
return {
prefers_reduced_motion: {
media_query: '@media (prefers-reduced-motion: reduce)',
actions: [
'Disable animations',
'Reduce animation duration',
'Remove parallax effects',
'Disable autoplay'
]
}
};
}
screenReaderConsiderations() {
return {
announcements: 'Use ARIA live regions for updates',
feedback: 'Provide screen reader feedback for interactions',
labels: 'Clear, descriptive button labels',
states: 'Announce state changes (expanded, selected)'
};
}
}
Best Practices
✅ DO
- •Keep animations under 400ms
- •Provide clear visual feedback
- •Use animations to guide attention
- •Respect motion preferences
- •Make interactions reversible
- •Test with keyboard and screen readers
- •Provide multiple interaction methods
- •Design for touch and mouse
- •Use appropriate easing curves
- •Document interaction behavior
❌ DON'T
- •Animate for decoration only
- •Use animations longer than 500ms
- •Ignore motion-sensitive users
- •Remove focus indicators
- •Trap users in modals
- •Use confusing animations
- •Animate everything
- •Ignore loading states
- •Forget error states
- •Skip accessibility testing
Interaction Design Tips
- •Animation should feel instant (<200ms) or natural (300-500ms)
- •Use consistent easing across experience
- •Pair animations with haptic feedback on mobile
- •Test animations on actual devices