vue中使用自定义指令(directive)解决h5在ios的微信浏览器问题以及长按进行dom操作

该博客介绍了如何在Vue中针对iOS微信浏览器中h5页面键盘弹起时定位元素被顶起的问题,提供了一个自定义指令`v-fixedInput`来修复。同时,为了实现长按删除的功能,创建了另一个自定义指令`v-longpress`,并在需要长按的DOM元素上应用。这两个自定义指令简化了复杂交互的实现。
摘要由CSDN通过智能技术生成

在这里插入图片描述

问题1: h5在ios的微信浏览器中,唤起键盘后,设置定位的元素会被顶起,并且在键盘消失后不会回到原来的位置

第一步:创建vue自定义指令

import Vue from 'vue'
const windowHeight = window.innerHeight
// 弹起输入框,固定页面定位(ios问题)
Vue.directive('fixedInput', function (el, binding) {
  el.addEventListener('blur', function () {
    let windowFocusHeight = window.innerHeight
    if (windowHeight == windowFocusHeight) {
      return
    }
    let currentPosition;
    let speed = 1; //页面滚动距离
    currentPosition = document.documentElement.scrollTop || document.body.scrollTop;
    currentPosition -= speed;
    window.scrollTo(0, currentPosition); //页面向上滚动
    currentPosition += speed; //speed变量
    window.scrollTo(0, currentPosition); //页面向下滚动
  })
})

第二步:在dom上用v-fixedInput指令



<input v-fixedInput></input>

在这里插入图片描述

问题二:h5中,历史数据列表中有个需求:长按当前记录 删除,原生写起来比较复杂。

第一步:创建vue自定义指令

import Vue from 'vue'
Vue.directive('longpress', function (el, binding) {
    var timer = null;
    var start = function (e) {
        // 如果是点击事件,不启动计时器,直接返回
        if (e.type === 'click') {
            return
        }
        if (timer == null) {

            // 创建定时器 ( 2s之后执行长按功能函数 )
            timer = setTimeout(function () {
                //执行长按功能函数
                binding.value.handleLongClick(binding.value.item)
            }, 1000)
        }
    }
    var cancel = function () {
        if (timer !== null) {
            clearTimeout(timer)
            timer = null
        }
    }
    // 添加事件监听器
    el.addEventListener("mousedown", start);
    el.addEventListener("touchstart", start);

    // 取消计时器
    el.addEventListener("click", cancel);
    el.addEventListener("mouseout", cancel);
    el.addEventListener("touchend", cancel);
    el.addEventListener("touchcancel", cancel);
})

第二步:在需要长按的dom上使用v-longpress

<div  v-longpress></div>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值