A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/vue-a11y/vue-focus-loop/tree/next below:

GitHub - vue-a11y/vue-focus-loop at next

🔥 HEADS UP! You are in the Vue 3 compatible branch, check the branch for Vue 2 support.

Vue 3 component that helps you to to trap focus in an element.

When developing accessible components, in certain behaviors it is important to trap focus on the element.

For example, when opening a modal, it is recommended that the focus is only on the tabbable elements of that modal and only release the focus, when the modal is closed.

Add @vue-a11y/focus-loop for Vue 3 in your Vue project.

npm install -S @vue-a11y/focus-loop@next
# or
yarn add @vue-a11y/focus-loop@next

Or via CDN

<script src="http://unpkg.com/@vue-a11y/focus-loop@next"></script>

You can use it globally in your main.js.

import Vue from 'vue'
import VueFocusLoop from '@vue-a11y/focus-loop'

Vue.use(VueFocusLoop)

Or you can import into your component.

import { FocusLoop } from '@vue-a11y/focus-loop'

export default {
  components: {
    FocusLoop
  }
}

Example of use on your single file component.

<template>
  <div>
    <b-button v-b-modal.modal-1>Launch demo modal</b-button>

    <b-modal id="modal-1" title="BootstrapVue">
      <FocusLoop :is-visible="isOpen">
        <b-form @submit="onSubmit" @reset="onReset" v-if="show">
          <b-form-group id="input-group-2" label="Your Name:" label-for="input-1">
            <b-form-input
              id="input-1"
              v-model="form.name"
              required
              placeholder="Enter name"
            ></b-form-input>
          </b-form-group>

          <b-form-group id="input-group-2" label="Your Email:" label-for="input-2">
            <b-form-input
              id="input-2"
              type="email"
              v-model="form.email"
              required
              placeholder="Enter email" 
            ></b-form-input>
          </b-form-group>

          <b-button type="submit" variant="primary">Submit</b-button>
          <b-button type="reset" variant="danger">Reset</b-button>
        </b-form>
      </FocusLoop>
    </b-modal>
  </div>
</template>
Make the focus-loop container visible and rendered prop type default isVisible Boolean false
<FocusLoop :is-visible="isOpen">
  <!-- your elements here -->
</FocusLoop>

You can disable the focus trap and activate it only when you really need it.

prop type default disabled Boolean false

For example:

<FocusLoop :is-visible="isOpen" disabled>
  <!-- your elements here -->
</FocusLoop>
Disable autofocus on the first element

When activating the <FocusLoop>, the first element receives the focus automatically, however, if you want to disable this behavior, just disable it through the autoFocus prop.

prop type default autoFocus Boolean true

For example:

<FocusLoop :is-visible="isOpen" :auto-focus="false">
  <!-- your elements here -->
</FocusLoop>

Keyboard users will use Tab and Shift + Tab to navigate tabbable elements.

According to the Modal Dialog Example in WAI-ARIA Authoring Practices specification, when the focus is on the last focusable element, you must move the focus to the first element and vice versa.

Key Function Tab â–¸ Moves focus to next focusable element inside the dialog.
â–¸ When focus is on the last focusable element in the dialog, moves focus to the first focusable element in the dialog. Shift + Tab â–¸ Moves focus to previous focusable element inside the dialog.
â–¸ When focus is on the first focusable element in the dialog, moves focus to the last focusable element in the dialog. Articles that served as inspiration:

Follow us on Twitter @vue_a11y

Thank you


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4