Skip to content

Latest commit

 

History

History
104 lines (76 loc) · 2.59 KB

use-window-focus.md

File metadata and controls

104 lines (76 loc) · 2.59 KB

useWindowFocus

useWindowFocus tracks if the window is focused or not.

Adds two new behaviors to your Stimulus controller: focus and unfocus.

Reference

useWindowFocus(controller, options)

controller : a Stimulus Controller (usually 'this')

options :

Option Description            Default value               
dispatchEvent Whether to dispatch a window-focus:focus event or not. true
eventPrefix Whether to prefix or not the emitted event. Can be a boolean or a string.
- true prefix the event with the controller identifier application:visible
- someString prefix the event with the given string someString:invisible
- false to remove prefix
true
debug Whether to log debug information. See debug for more information on the debugging tools false
interval The interval in ms to check if the window is focused or not. 200

Example :

A typical use case would be to pause a video when the user navigate tabs. While use-visibility just checks if the window might be visible useWindowFocus actually checks if the window is focused or not.

// video_controller.js

export default class extends Controller {
  connect() {
    useWindowFocus(this)
    this.player = new VideoPlayer()
  }

  focus() {
    this.player.play()
  }

  unfocus() {
    this.player.pause()
  }
}

Usage

Composing

import { Controller } from '@hotwired/stimulus'
import { useWindowFocus } from 'stimulus-use'

export default class extends Controller {
  connect() {
    useWindowFocus(this)
  }

  focus() {
    // triggered when the window is focused
  }

  unfocus() {
    // triggered when the window is unfocused
  }
}

Extending a controller

import { WindowFocusController } from 'stimulus-use'

export default class extends WindowFocusController {
  focus() {
    // triggered when the window is focused
  }

  unfocus() {
    // triggered when the window is unfocused
  }
}

Events

This module adds two new events focus and unfocus (prefixed by the controller identifier by default) event that you may use to triggers Stimulus actions.

<div class="player" data-controller="player" data-action="focus@document->player#play unfocus@document->player#pause">
  ...
</div>
// application_controller.js

export default class extends Controller {
  connect() {
    useWindowFocus(this, { eventPrefix: false })
  }
}