Bilibili-Evolved/registry/lib/components/touch/combo-like/index.ts
2022-10-12 23:27:58 +08:00

43 lines
1.2 KiB
TypeScript

import { defineComponentMetadata } from '@/components/define'
import { videoUrls } from '@/core/utils/urls'
const entry = async () => {
const { select } = await import('@/core/spin-query')
const likeButton = (await select(':is(.ops, .video-toolbar-v1) span.like')) as HTMLElement
if (!likeButton) {
return
}
likeButton.style.userSelect = 'none'
const mountEvent = (name: string, args: EventInit) => {
const event = new CustomEvent(name, args)
likeButton.dispatchEvent(event)
}
const clickInterval = 200
let click = true
likeButton.addEventListener('touchstart', e => {
e.preventDefault()
click = true
setTimeout(() => (click = false), clickInterval)
mountEvent('mousedown', e)
})
likeButton.addEventListener('touchend', e => {
e.preventDefault()
mountEvent('mouseup', e)
if (click) {
mountEvent('click', e)
}
})
}
export const component = defineComponentMetadata({
name: 'touchComboLike',
displayName: '三连触摸支持',
tags: [componentsTags.touch],
enabledByDefault: navigator.maxTouchPoints > 0,
entry,
description: {
'zh-CN': '为视频页面中的三连操作 (长按点赞) 启用触摸支持.',
},
urlInclude: videoUrls,
})