美文网首页
[Vue Js]如何实现一个带遮罩的全屏div

[Vue Js]如何实现一个带遮罩的全屏div

作者: 全汪汪 | 来源:发表于2019-10-21 15:52 被阅读0次

    效果

    选择前
    鼠标放置后

    ps:可能图片颜色有点...umm特别可能看不出来

    大体实现

    三个内容的宽度为100%,这样屏幕就会均分三部分。然后将遮罩宽度也设为100%均分,为了让其“盖”在内容上面,需要将遮罩的父div设置成absolute,当然其宽度和高度要和内容一样,最后再设置鼠标的事件监听就好了。

    令人困惑的事情

    如果你按照我上面所说的思路实现,你会发现:

    如白框多出了一点
    尼玛这是为什么???都是设的100%,按道理应该也是一样平分三等分。再按f12看看宽度
    内容宽度高度
    遮罩的宽度和高度
    可以看到这里遮罩的宽度就比内容大了16,还多了一个left right的值,这尼玛是为什么。
    百度啊当然是百度(我发誓不用谷歌,谁叫谷歌反华呢!)
    链接,感谢这位博主的解答
    博客中开头就提到
    所以我们只要把遮罩的父布局设成relative就好了。

    大概的源码

    <div class="main">
        <div class="content_main">
          <div v-for="item in title" v-bind:class="item.mclass" v-bind:key="item.text" v-on:mouseenter="mouseover(item)">
            <span class="title">{{item.text}}</span>
          </div>
        </div>
        <div class="mask_main" v-if="showMask">
          <div v-for="item in title" v-bind:class="{mask_item_select: item.active ,mask_item_unselect: !item.active}" v-bind:key="item.text" v-on:mouseleave="mouseout(item)"></div>
        </div>
      </div>
    
    .content_main{
        display: flex;
        width: 100%;
        height: 1000px;
        position: relative;
      }
    .mask_main {
        position: absolute;
        width: 100%;
        height: 1000px;
        display: flex;
      }
    

    ps: 遮罩的父布局也要同时隐藏,因为对内容用的是mouseenter,对显示出来的遮罩用mouseleave。如果不把遮罩的父布局隐藏,会无法触发内容的mouseenter(被遮罩父布局挡住了)。这种做法好像很奇怪,有更好的可留言。

    后话

    刚玩前端呢,想试写game/anime/manga的网站,先把Android放下(分手吧!)。

    相关文章

      网友评论

          本文标题:[Vue Js]如何实现一个带遮罩的全屏div

          本文链接:https://www.haomeiwen.com/subject/sfgiyctx.html