kliping.pro
  • Docs
  • Explore
  • Builder
  • Directory
  • Colors
  • Typeset
Saved
Hooks
  • Getting Started2
  • State7
  • Advanced6
  • Lifecycle16
  • Browser21
  • useActiveElement
  • useBattery
  • useClickAnyWhere
  • useClickAway
  • useClipboard
  • useDocumentVisibility
  • useElementSize
  • useEventListener
  • useFps
  • useFullscreen
  • useHash
  • useHover
  • useInViewport
  • useIsMatchMedia
  • useIsOnline
  • useMouse
  • useNetwork
  • useOs
  • useScrollLock
  • useTextSelection
  • useTitle
  • Development1
  • Third-Party4
  • Libraries4
  1. Hooks
  2. Browser
  3. useBattery

useBattery

PreviousNext

Keadaan baterai perangkat.

Dukungan peramban untuk API ini menyusut, bukan bertambah — Firefox dan Safari sudah mencabutnya karena bisa dipakai menyidik perangkat. Karena itu isSupported harus benar-benar diperiksa di tempat pemakaian, dan tampilannya harus tetap masuk akal saat nilainya tidak pernah datang.

Nilai bawaannya sengaja optimistis — terisi penuh, tidak sedang mengisi — supaya tampilan yang memakainya tidak mengedipkan peringatan "baterai lemah" di peramban yang memang tidak akan pernah menjawab.

Installation ​

pnpm dlx kliping@latest add use-battery

Ikut terpasang sendiri: try-on-mounted.

Salin dulu is-browser, try-on-mounted — masing-masing memuat sumbernya di halamannya sendiri — lalu tempel berkas ini.

ts
import { getCurrentScope, onScopeDispose, ref } from 'vue'
import { tryOnMounted } from '@/lib/try-on-mounted'

const EVENTS = [
  'chargingchange',
  'chargingtimechange',
  'dischargingtimechange',
  'levelchange',
] as const

interface BatteryManager extends EventTarget {
  charging: boolean
  chargingTime: number
  dischargingTime: number
  level: number
}

interface NavigatorWithBattery extends Navigator {
  getBattery?: () => Promise<BatteryManager>
}

export function useBattery() {
  const isSupported = ref(false)
  const charging = ref(false)
  const chargingTime = ref(0)
  const dischargingTime = ref(0)
  const level = ref(1)

  let battery: BatteryManager | null = null
  let disposed = false

  const update = () => {
    if (!battery || disposed) return
    charging.value = battery.charging
    chargingTime.value = battery.chargingTime
    dischargingTime.value = battery.dischargingTime
    level.value = battery.level
  }

  tryOnMounted(() => {
    const nav = navigator as NavigatorWithBattery
    if (typeof nav.getBattery !== 'function') return

    isSupported.value = true

    nav
      .getBattery()
      .then((manager) => {
        if (disposed) return

        battery = manager
        update()
        for (const name of EVENTS) manager.addEventListener(name, update)
      })
      .catch(() => {})
  })

  if (getCurrentScope()) {
    onScopeDispose(() => {
      disposed = true
      if (!battery) return
      for (const name of EVENTS) battery.removeEventListener(name, update)
    })
  }

  return {
    /** Whether the Battery Status API is available. Reactive. */
    isSupported,
    /** Whether the device is charging. Reactive. */
    charging,
    /** Seconds until fully charged; 0 when full or unknown. Reactive. */
    chargingTime,
    /** Seconds until empty; `Infinity` while charging. Reactive. */
    dischargingTime,
    /** Charge level from 0 to 1. Reactive. */
    level,
  }
}

Requirements ​

RequirementValue
ProjectVue 3.5+, alias @ — disiapkan kliping init
Kliping itemstry-on-mounted
Filescomposables/use-battery.ts

API Reference ​

ts
export function useBattery()

Parameters ​

Tanpa parameter.

Returns ​

Reactive battery state; stays at the defaults when the API is missing.

PropertyTypeDescription
isSupportedRef<boolean, boolean>Whether the Battery Status API is available. Reactive.
chargingRef<boolean, boolean>Whether the device is charging. Reactive.
chargingTimeRef<number, number>Seconds until fully charged; 0 when full or unknown. Reactive.
dischargingTimeRef<number, number>Seconds until empty; Infinity while charging. Reactive.
levelRef<number, number>Charge level from 0 to 1. Reactive.

Credits ​

Berasal dari shadcn-hooks (MIT, Copyright (c) 2025 Brendan Dash). Rantai lengkapnya di Credits.

PrevioususeActiveElementNext useClickAnyWhere

On This Page

InstallationRequirementsAPI ReferenceParametersReturnsCredits

© 2026 Kliping. Free components are open source under the MIT License.

LicenseCreditsRoadmap