关于在弹出框中做点击按钮定位至某一位置的功能

今天做了一个功能,在弹出框中做一个点击上面的标签按钮可以定位到下面的位置

上图

 

 <el-select
      style="width: 100px"
      v-model="data.cname"
      popper-class="selectStyle"
      size="small"
      placeholder="请选择"
    >
      <div style="height:70px">
        <el-input v-model="input" size="mini" placeholder="请输入内容" />
        <!--循环遍历下拉框中的按钮-->
        <el-button v-for="(it,i) in selectData" :key="i" @click="jumpClick('#group'+i)" size="mini">{{it.label}}</el-button>
      </div>

      <div  style="overflow: auto;height: 340px">
        <el-option-group
          v-for="(group,index) in selectData"
          :id="'group'+index"   // 给位置放id
          :key="group.label"
          :label="group.label"
        >
          <el-option
            v-for="item in group.options"
            :key="item.id"
            :label="item.cname"
            :value="item.id"
          />

        </el-option-group>
      </div>

    </el-select>

数据格式参考elementui的select

 searchDom(){
      let dom
      // 循环获取所有的弹框
      for (let j = 0; j <document.querySelectorAll('.selectStyle').length ; j++) {
        // 获取所有的style  getComputedStyle()这个方法可以获取dom元素的所有样式,具体用法可以百度一下
        var divclass= getComputedStyle(document.querySelectorAll('.selectStyle')[j])
        // 寻找显示的那个弹框
        if(divclass.display=='block'){
          dom = document.querySelectorAll('.selectStyle')[j]
        }
      }
      return dom
    },
    // 点击跳转至当前锚点
    jumpClick(i){

      let dom
      dom = this.searchDom()
      // 在弹框的dom中寻找id
      dom.querySelector(i).scrollIntoView(true)
    },

因为弹出框是在dom结构外,body结构内的,而且每打开一个弹框都会在body增加一个dom,

所以主要问题是如何获取显示弹框的dom,一开始走了弯路,想要在dom树种删除dom,结果失败了,因为没法保证删除时机,

后来思考寻找这每个弹出框dom的不同点,

显示的弹框的dom样式上的display为block,隐藏的为none,所以以这个为突破口。获取所有的弹出框(这边给弹出框加上了自定义类名)。

然后遍历获取每个弹出框的样式,并判断它的display样式是否为block(显示),

如果为(block)显示则就是我们要找的弹出框,然后在获取弹框内的做标记的id的dom,最后再用 scrollIntoView(true)滚动过去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值