vue+element实现双向描点

10 篇文章 1 订阅 ¥9.90 ¥99.00
35 篇文章 0 订阅
本文介绍如何在Vue.js项目中结合Element库实现双向数据绑定,通过实例展示了具体的截图效果,帮助读者理解这一核心特性。
摘要由CSDN通过智能技术生成

截图效果

左右双向绑定
在这里插入图片描述

<template>
  <!-- 填写申请信息 -->
  <el-row :gutter="15" class="main" ref="infoView">
      <el-col :span="16" class="anchor-content">
          <el-card shadow="hover" class="card1" id="project">
            <div slot="header">
              表单一
            </div>
            <div>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
            </div>
          </el-card>
          <el-card shadow="hover" class="card1 fadeInUp animated" id="insurance">
            <div slot="header">
              表单二
            </div>
            <div>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
            </div>
          </el-card>
          <el-card shadow="hover" class="card1 fadeInUp animated" id="insured">
            <div slot="header">
              表单三
            </div>
            <div>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
            </div>
          </el-card>
          <el-card shadow="hover" class="card1 fadeInUp animated" id="applicant">
            <div slot="header">
              表单四
            </div>
            <div>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
            </div>
          </el-card>
          <el-card shadow="hover" class="card1 fadeInUp animated" id="insuranceInfo">
            <div slot="header">
              表单五
            </div>
            <div>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
            </div>
          </el-card>
          <el-card shadow="hover" class="card1" id="invoiceInfo">
            <div slot="header">
              表单六
            </div>
            <div>
              asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>asdfdsafasdfasdf<br>
            </div>
          </el-card>
      </el-col>
      <el-col :span="4" class="fz-anchor-nav">
        <el-tabs tab-position="right" style="height: 400px;" v-model="navCurrent" @tab-click="handleClick">
          <el-tab-pane v-for="item in navList" :key="item.value" :label="item.label" :name="item.value"></el-tab-pane>
        </el-tabs>
      </el-col>
  </el-row>
 
</template>
<script>
export default {
  name:"selectProject",
  props: [],
  data() {
    return{
      navCurrent:"project",
      navList: [
        {value: 'project',label: '表单一'},
        {value: 'insurance',label: '表单二'},
        {value: 'insured',label: '表单三'},
        {value: 'applicant',label: '表单四'},
        {value: 'insuranceInfo',label: '表单五'},
        {value: 'invoiceInfo',label: '表单六'},
      ]
    }
  },
  mounted() {
    window.addEventListener('scroll', this.scrollPage)
  },
  methods: {
     handleClick(tab, event){
        // const returnEle = document.querySelector("#"+tab.name);  //将要跳转区域的id
        // if (!!returnEle) {
        //   returnEle.scrollIntoView(true); // true 是默认的
        // }
        // document.querySelector("#"+tab.name).scrollIntoView(true); //跳转对应的id

        this.$el.querySelector("#"+tab.name).scrollIntoView({
            behavior: "smooth", // 平滑过渡
            block: "start" // 上边框与视窗顶部平齐
        }); 
    },
    scrollPage() {
      /**
       * 反向联动
       */
      //获取所有锚点元素的高,并放在obj对象里     class用上了
      const navContents = document.querySelectorAll('.card1')
      const offsetTopArr = []
      for (let i = 0; i < navContents.length; i++) {
        const e = navContents[i]
        let temp = {
          offsetTop: e.offsetTop,
          id: e.id
        }
        offsetTopArr.push(temp)
      }
      console.log(offsetTopArr)
      // 获取当前文档流的滚动位置的高度 scrollTop
      const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
      // 定义当前点亮的导航下标
      let navIndex = 'scene'
      for (let n = 0; n < offsetTopArr.length; n++) {
        // 如果 scrollTop 大于等于第 n 个元素的 offsetTop 则说明 n-1 的内容已经完全不可见
        // 那么此时导航索引就应该是 n 了
        if (scrollTop >= offsetTopArr[n].offsetTop) {
          navIndex = offsetTopArr[n].id
        }
      }
      this.navCurrent = navIndex
      
      //变量windowHeight是可视区的高度
      let windowHeight1 = document.documentElement.clientHeight || document.body.clientHeight;
      //变量scrollHeight是滚动条的总高度
      let scrollHeight1 = document.documentElement.scrollHeight||document.body.scrollHeight;
      //滚动条到底部
      if(scrollTop+windowHeight1 == scrollHeight1){
        this.navCurrent = "invoiceInfo"
      }
    }
  }
}

</script>
<style scoped>

.anchor-nav{
  position: fixed;
}
</style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员奋斗者GO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值