需求:鼠标左键后左右移动后实现对值的修改

开篇:

        用户在指定位置鼠标左键按下后移动鼠标,根据用户的移动距离来对input中的数据进行+-的操作,当鼠标松开后结束计算

HTML部分:

<template>
  <div class="new-text-input">
    <v-row class="text-input-row">
      <!--当用户鼠标按下后开始计算移动距离-->
      <v-col
        tabindex="0"
        class="text-input-prepend"
        @[prependDraggable?`mousedown`:null]="onPrependMouseDown"
      >
        <v-icon size="18"></v-icon>
      </v-col>

      <v-col class="text-input-content">
      </v-col>

      <v-col class="text-input-append">
      </v-col>
    </v-row>
  </div>
</template>

js部分关键

// 记录上一次鼠标移动时的x坐标
let prevClientX = 0;
// 记录按下鼠标左键时input的初始值
let currentValue = 0;

// 鼠标按下事件
const onPrependMouseDown = event => {
  currentValue = +inputRef.value.value;
  prevClientX = event.clientX;
  document.addEventListener('mouseup', onDocumentMouseUp);
  document.addEventListener('mousemove', onDocumentMouseMove);
};

//鼠标抬起触发
const onDocumentMouseUp = () => {
  isFirstFocus = false;
  document.removeEventListener('mouseup', onDocumentMouseUp);
  document.removeEventListener('mousemove', onDocumentMouseMove);
};

// 鼠标移动时,计算这个距离
const onDocumentMouseMove = event => {
  currentValue += event.clientX - prevClientX;
  prevClientX = event.clientX;
  const value = sanitizeValue(currentValue);
  emits('valueChange', value);
}

// 在测试的时发现,如果用户左移太快,mousemove事件触发会跟不上,导致左移动无法到0(会留一点),这个函数就可以处理这个问题
const sanitizeValue = value => {
  value = Math.max(props.min, Math.min(+value, props.max));
  inputRef.value.value = value;
  return Math.round(value);
};

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值