element ui 中 el-tooltip__popper在页面中不消失,只有点击其它地方才能消失

在实际工程中有时会用到消息提示组件el-tooltip,会发现如果当前页面点开了消息提示之后并没有进行其它点击操作时,那个弹出的el-tooltip__popper是不会消失的,比如点击出现弹框后,我们只是进行了页面的上下滑动,那个弹窗会一直固定在那个位置,并不会跟随滑动而改变它在视口中的位置,当然这种情况是出现在移动端或者ipad上。

首先element ui这个组件库主要是用来应用在电脑操作的项目上,它们对于事件的监听也是对使用电脑过程中的事件进行监听,比如鼠标的各个事件,我们现在谈到的这个组件监听到的是鼠标的移入移出事件,而换到移动端上是没有鼠标的移入移出事件的,换成手势动作是手指点击,出现弹框,再点击任意地方收起弹窗,但是我们不能保证每次点出弹窗都会有点击其他地方的这个操作,而且这样也显得很不合理,所以在开发过程中我想到了一种思路,就是希望在页面发生滑动时也可以达到和点击其它地方一样的效果,点击其它地方达到的效果无非就是将el-tooltip__popper样式中的 display值变成none,因为在使用过程中我们可以观察到控制el-tooltip__popper显示与隐藏的就是它自带的display属性

第一步:准备一个用来保存页面滚动时距离的参数,之后要通过监听它的值是否发生改变来判断页面是否发生了滑动

data(){ return { scrolTop :0 } }

第二步:监听页面的滚动事件

之后对于弹窗样式修改的操作就是要在这个监听中进行的,对于window的监听在原则上在created和mounted中都可以的,但是这里的操作涉及到获取dom,会出问题,在这里方便一些,不需要操作中用this.$nextTick()进行修饰。 注意这里要加第三个参数为true,改为事件捕获状态,不然是监听不到嵌在window中这个事件的

mounted(){ window.addEventListenr(  'scroll' , function(){} , true ) }

第三步:书写函数的处理逻辑

上面这个函数中的就是对定义的变量scrollTop进行数据的获取,但是这个函数需要单独给外层盒子添加滚动事件,直接写在window函数中是不生效的,所以上面才通过捕获来捕获事件的发生

<template>

    <div @scroll='scrollHandle'></div>

</template>

  ........

methods(){

  scrollHandle(){

      this.scrollTop = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset }

}

mounted(){ window.addEventListenr(  'scroll' , this. scrollHandle , true ) }  // 这里函数不需要加括号调用,滚动时会自己调用

第四步:监听变量的值,如果值发生变化就说明页面发生了滚动,就将弹框的display赋值为none

watch(){
    scrollTop:{

        handler(newVal,oldVal){ }

                    let toolTipClass = document.getElementByClassName('el-tooltip__popper')  // 获取到页面所有的popperDom,是个数组

                    if ( newVal !== oldVal ){   if( toolTipClass .length !==0){  for(let i=0 ;i<toollTipClass.length;i++)                    { toolTipClass[i].style.display='none'}  } }

                      } }

  当然也有一种情况,那就是通过滚动事件获取到的元素卷起高度一直不变,比如说在el-carousel-item中,获取到的scrollTop一直是0,这样一来监听这个变量变得没有意义了,那我们就可以通过自己手动来给这个变量赋值,让它成为一个可以通过页面滚动来实时变化的数值:

  scrollHandle(){  //针对于在html整个页面中部分元素滚动,监听不到数据变化的情况

      this.scrollTop += 1

}

为了优化的话可以通过定时器每几秒将这个变量值为初始值 

此时还是存在问题:即使在滑动后展示的提示信息消失了,也只是消失了而已,也就是说点击这个按钮,然后直接滑动页面,提示信息会消失,再次点击这个按钮提示信息并不会出现,需要点击页面的其它地方后,再点击这个按钮提示信息才会出现,因为这种办法没有在根本上解决这个问题,没有在滚动后失去焦点。

所以,我目前还不知道有什么特别好的办法解决这种问题,自己的话手写html+css也很容易实现和组件一样的效果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容