useScriptTriggerInteraction

useScriptTriggerInteraction 函数的 API 文档。

创建一个触发器,在任意指定的用户交互事件发生时加载脚本。这非常适合仅在用户真正与您的网站交互时加载脚本,从而提供出色的性能优化。

函数签名

function useScriptTriggerInteraction(options: InteractionScriptTriggerOptions): Promise<boolean>

参数

export interface InteractionScriptTriggerOptions {
  /**
   * 要监听的交互事件。
   */
  events: string[]
  /**
   * 监听事件的目标元素。
   * @default document.documentElement
   */
  target?: EventTarget | null
}

返回值

当任意指定的交互事件发生且应加载脚本时,返回一个解析为 true 的 Promise;如果触发器被取消,则解析为 false

在 Nuxt 配置中的使用

为了方便起见,您可以直接在 nuxt.config 中使用此触发器,而无需显式调用组合式函数:

export default defineNuxtConfig({
  scripts: {
    registry: {
      googleAnalytics: [{
        id: 'GA_MEASUREMENT_ID'
      }, {
        trigger: { interaction: ['scroll', 'click', 'keydown'] }
      }]
    }
  }
})

常见事件类型

以下是一些常用的交互事件:

  • 鼠标事件clickmousedownmouseupmouseovermouseentermouseleave
  • 触摸事件touchstarttouchendtouchmove
  • 键盘事件keydownkeyupkeypress
  • 滚动事件scrollwheel
  • 聚焦事件focusblurfocusinfocusout

示例

基本用法

当用户滚动、点击或按键时加载脚本:

const script = useScript({
  src: 'https://example.com/chat-widget.js',
}, {
  trigger: useScriptTriggerInteraction({
    events: ['scroll', 'click', 'keydown']
  })
})

首次交互时加载分析脚本

仅当用户实际与您的网站交互时加载分析脚本:

<script setup lang="ts">
// 在任意用户交互时加载分析脚本
const { $script } = useScriptGoogleAnalytics({
  id: 'GA_MEASUREMENT_ID'
}, {
  trigger: useScriptTriggerInteraction({
    events: ['click', 'scroll', 'keydown', 'touchstart']
  })
})

// 追踪首次交互
watch($script.status, (status) => {
  if (status === 'loaded') {
    gtag('event', 'first_interaction', {
      event_category: 'engagement'
    })
  }
})
</script>

监听特定元素

在特定元素上监听事件:

<script setup lang="ts">
const headerEl = ref<HTMLElement>()

const script = useScript({
  src: 'https://example.com/header-widget.js'
}, {
  trigger: useScriptTriggerInteraction({
    events: ['click', 'mouseover'],
    target: headerEl
  })
})
</script>

<template>
  <header ref="headerEl">
    <!-- 该脚本在此 header 被点击或悬停时加载 -->
    <nav>...</nav>
  </header>
</template>

渐进式功能加载

根据不同的交互类型加载功能:

<script setup lang="ts">
// 用户进行任意输入交互时加载搜索增强功能
const searchScript = useScript({
  src: 'https://cdn.example.com/search.js'
}, {
  trigger: useScriptTriggerInteraction({
    events: ['click', 'focus', 'keydown']
  })
})

// 用户滚动或点击分享按钮时加载社交分享功能
const socialScript = useScript({
  src: 'https://cdn.example.com/social-sharing.js'
}, {
  trigger: useScriptTriggerInteraction({
    events: ['scroll', 'click']
  })
})
</script>

移动端优化加载

使用触摸事件实现移动端特性优化加载:

<script setup lang="ts">
// 在触摸交互时加载移动端特定功能
const mobileScript = useScript({
  src: 'https://cdn.example.com/mobile-features.js'
}, {
  trigger: useScriptTriggerInteraction({
    events: ['touchstart', 'touchmove', 'scroll']
  })
})
</script>

最佳实践

  • 从常见事件开始:对大多数用例来说,使用 ['scroll', 'click', 'keydown'] 是不错的默认选择
  • 考虑移动用户:包含 touchstart 等触摸事件以优化移动端体验
  • 针对特定元素监听:使用 target 选项只监听页面相关部分的事件
  • 合理组合事件:避免事件类型过多,专注于有意义的交互
  • 测试性能影响:验证基于交互的加载是否真正改善了性能指标
  • 回退方案考虑:考虑用户不交互时的情况(例如结合超时触发器)