前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >useMousewheel 实现鼠标滚轮数字控制

useMousewheel 实现鼠标滚轮数字控制

作者头像
copy_left
发布2021-02-22 11:55:24
1.4K0
发布2021-02-22 11:55:24
举报
文章被收录于专栏:方球方球方球

select-video.gif

import {
  computed,
  ref, watch
} from 'vue'
import {
  useToggle,
  useBool
} from 'vx-hooks'

/* eslint-disable  @typescript-eslint/no-explicit-any */
export type MouseWheelDirection = 'up' | 'down'

/**
 * 鼠标滚轮
 * @module hooks
 * @returns { Object }
 * - wheelEvent 滚轮事件对象
 * - direction 滚动方向 'up' | 'down'
 * - isUp 滚动方向是否为上
 * 
 * - setUp() direction 设置为 'up'
 * - setDown() direction 设置为 'down'
 * - onMousewheel() 鼠标滚轮事件
 * 
 * - disabled 是否响应滚轮事件
 * - canUse disabled 设置为 false 开启 onMousewheel
 * - unUse disabled 设置为 true 关闭 onMousewheel
 * 
 * @example
 * 
 * <a-input-number
 *  @focus.stop='onFocus'
 *  @blur.stop='onBlur'
 *  v-model:value='valueProxy'
 *  >
 * </a-input-number>
 * 
 * 
 * {
 *   props: {
 *    value: { type: Number, default: 0 },
 *    step: { type: Number, default: 1 } 
 *   },
 *   setup(props, ctx){
 *      const valueProxy = computed<number>({
 *    get(){
 *       return props.value
 *    },
 *      set(d: number){
 *       ctx.emit('update:value', d)
 *      }
 *    })
 *
 *    const {
 *      isUp,
 *      canUse,
 *      unUse,
 *      wheelEvent,
 *      onMousewheel
 *    } = useMousewheel()
 *
 *    watch(wheelEvent, () =>  {
 *      isUp.value ? valueProxy.value -= props.step : valueProxy.value += props.step
 *    })
 *    
 *    const onFocus = canUse
 *    const onBlur = unUse
 *    
 *    return { ... }
 *  }
 * }
 * 
 */
export default function useMousewheel() {
  const wheelEvent = ref<any>()
  const { state: direction, setLeft: setUp, setRight: setDown } = useToggle('up', 'down')
  const { state: disabled, setTrue: unUse, setFalse: canUse } = useBool()
  const isUp = computed(() => direction.value === 'up')

  watch(wheelEvent, (newVal) => {
    if (newVal) {
      newVal.deltaY as number < 0 ? setUp() : setDown()
    }
  })

  const onMousewheel = (e: any) => {
    if (disabled.value) {
      return
    }
    wheelEvent.value = e
  }

  return {
    wheelEvent,
    direction,
    isUp,
    setUp,
    setDown,

    disabled,
    canUse,
    unUse,

    onMousewheel
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档