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

在这里插入图片描述

问题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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值