左右联动布局效果

这篇具有很好参考价值的文章主要介绍了左右联动布局效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 效果图:

左右联动布局效果,vue.js,elementui文章来源地址https://www.toymoban.com/news/detail-831632.html

<template>
  <el-dialog :modelValue="modelValue" :before-close="close" fullscreen :close-on-click-modal="false">
    <div class="farmer_detail">
      <div class="info_content">
        <div class="info_left">
          <!-- @click.native="stepClick(item, key)" -->
          <el-tabs tab-position="left" class="demo_tab_farmer_pop" v-model="activeStep" @tab-click="stepClick">
            <el-tab-pane :label="item.title" :name="key" v-for="(item, key) in stepList" :key="key">
              <template #label>
                <span class="custom_label">
                  <span>{{ item.title }}</span>
                </span>
              </template>
            </el-tab-pane>
          </el-tabs>
        </div>
        <div class="info_right" ref="rightRef">
          <el-scrollbar :height="calcScrollHeight + 'px'" ref="scrollMenuRef" @scroll="onScroll" @wheel="handleWheel">
            <!-- <p v-for="item in 20" :key="item" class="scrollbar-demo-item">{{ item }}</p> -->
            <div class="scroll_container" ref="right" id="scrollContent">
              <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="130px">
                <div class="scroll_content">
                  <div class="info_title" id="JCxx">基础信息</div>
                  <el-row :gutter="20">
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='realName' label='姓名'>
                        <el-input v-model="ruleForm.realName" placeholder="请输入姓名" :disabled='isEdit' clearable
                          style='width:100%;'></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='paperNumber' label='身份证号'>
                        <el-input v-model="ruleForm.paperNumber" placeholder="请输入身份证号" :disabled='isEdit' clearable
                          style='width:100%;'></el-input>
                      </el-form-item>
                    </el-col>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='gender' label='性别'>
                        <selectOption v-model="ruleForm.gender" placeholder="请选择性别" :disabled="isEdit"
                          :optionList="genderList" clearable>
                        </selectOption>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </div>
                <div class="scroll_content">
                  <div class="info_title" id="ZZxx">组织信息</div>
                  <el-row>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item label="担任职务" prop="holdType">
                        <selectOption v-model="ruleForm.holdType" placeholder="请选择担任职务" :disabled="isEdit"
                          :multiple="false" :collapseTags="true" typeCode="new_has_job" clearable>
                        </selectOption>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </div>
                <div class="scroll_content">
                  <div class="info_title" id="JYxx">教育与社会信息</div>
                  <el-row>
                    <el-col :xs="colSpan.xs" :sm="colSpan.sm" :md="colSpan.md" :lg="colSpan.lg" :xl="colSpan.xl">
                      <el-form-item prop='school' label='毕业院校'>
                        <el-input v-model="ruleForm.school" placeholder="" :disabled='isEdit' clearable
                          style='width:100%;'></el-input>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </div>
              <div class="scroll_content">
                <div class="info_title" id="ZCxx">资产信息</div>
                <div>
                  <CusTable ref="zcTableRef" :column="zcColumnTD" :tableData="zcTableDataTD" title="土地信息">
                    <span slot="title">土地信息(7块,3.68亩)</span>
                  </CusTable>
                </div>
              </div>

              <div class="scroll_content">
                <div class="info_title" id="BTxx">补贴信息</div>
                <CusTable ref="btTableRef" :column="btColumn" :tableData="btTableData" title="补贴信息(7项)">
                  <span slot="title">补贴信息(7项)</span>
                </CusTable>
                <!-- 补贴信息 -->
              </div>
          <div class="info_title" id="XYxx">信用评价</div> -->
            </div>
          </el-scrollbar>
        </div>
      </div>
      <!-- </el-card> -->
    </div>
    <template #footer>
      <el-button type="default" @click="close">取 消</el-button>
      <el-button type="primary" @click="submit(ruleFormRef)" v-if="!btnShow">
        确 认
      </el-button>
    </template>
  </el-dialog>
</template>



const stepList = ref([
  { title: '基础信息', id: 'JCxx' },
....
  { title: '资产信息', id: 'ZCxx' },
  { title: '补贴信息', id: 'BTxx' },
  { title: '信用评价', id: 'XYxx' }])

const scrollMenuRef = ref(null)
//计算右侧可滚动区域高度
const calcScrollHeight = computed(() => clientHeight.value - 390)
const clientHeight: any = ref(document.documentElement.clientHeight || document.body.clientHeight)
watch(clientHeight, (newVal, oldVal) => {
  return newVal
})
let right = ref(null); // 右边 列表盒子
onMounted(() => {
  window.onresize = () => {
    clientHeight.value = `${document.documentElement.clientHeight}`;
  }
})



const stepTag = ref(1) //标识是点击滚动还是滚轮滑动滚动
const rightRef = ref()

//点击滚动  //待完善功能是否到底部不可点击或者滚动
const stepClick = (item: any, index: number) => {
  let ind = Number(item.index)
  var id = "#" + stepList.value[ind].id
  stepTag.value = 1
  if (activeStep.value - ind == 0) return
  activeStep.value = ind
  //监听滚动条是否到底部
  const curDom: any = document.querySelector(id);
  const dom: any = document.getElementById('scrollContent');
  if (curDom) {
    document.querySelector(id).scrollIntoView({
      behavior: "smooth",
      block: "start",
      inline: "nearest",
    });
  }
}

//右侧内容滚动方法
const onScroll = (e:any) => {
  if (stepTag.value == 1) return
  let scrollItems: any = document.querySelectorAll(".scroll_content");
  // console.log(e, scrollItems,scrollItems[0].offsetTop,'ee')
  for (let i = scrollItems.length - 1; i >= 0; i--) {
    // 判断滚动条滚动距离是否大于当前滚动项可滚动距离 e.target.scrollTop
    let judge = e.scrollTop >= scrollItems[i].offsetTop - 100 - scrollItems[0].offsetTop;
    if (judge) {
      activeStep.value = i;
      break;
    }
  }
}
// 是否是右侧滚动
const handleWheel = (e) => {
  stepTag.value = 0
}

<style lang="scss" scoped>
.farmer_detail {
  .img_box {
    height: 200px;
    text-align: center;

    .user_name {
      padding-top: 10px;
      font-size: 18px;
    }

    .block {
      .btn_back {
        float: right;
      }
    }
  }

  .info_content {
    display: flex;
    position: relative;
    // width: 100%;
    justify-content: flex-end;



    .info_left {
      width: 300px;

      .demo_tab_farmer_pop {
        >:deep(.el-tabs__header) {
          .el-tabs__item {
            // width:244px;
            padding-right: 60px;
            height: 60px;
            line-height: 60px;
            font-size: 18px;
            transition: background-color .3s ease-in-out;
          }

          .el-tabs__nav-wrap::after {
            background-color: #ECF3FF;
          }

          .el-tabs__nav-wrap,
          .el-tabs__nav-scroll {
            overflow: visible;
          }

          .el-tabs__item.is-active {
            background-color: #ECF3FF;

          }

          .el-tabs__item::after {
            content: "";
            position: absolute;
            right: -4px;
            bottom: 25px;
            width: 10px;
            height: 10px;
            box-sizing: border-box;
            border: 1px solid #CCCCCC;
            background: #FFFFFF;
            border-radius: 50%;
          }

          .el-tabs__active-bar.is-left {
            width: 10px;
            height: 10px !important;
            border-radius: 50%;
            background-color: #2F71F5;
            top: 25px;
            right: -4px;
          }

        }
      }
    }

    .info_right {
      flex: 1;

      // width: calc(100% - 200px);
      overflow-y: auto;

      .scroll_container {
        padding-right: 20px;
      }

      .info_title {
        display: flex;
        align-items: center;
        margin: 20px 0;
        font-size: 18px;
        font-weight: 700;
      }

      .info_title:first-child {
        margin-top: 0;
      }
    }
  }
}
</style>

到了这里,关于左右联动布局效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js实现左右切换轮播图效果

    实现效果: 自动向右循环播放 鼠标悬停,移出继续播放 点击向右按钮,跳到下一张 点击向左按钮,跳到上一张 保证图片的过渡效果完整呈现后,才能跳到下一张 底部圆点随图片位置切换激活状态 实现思路: 把第一张图片复制到最后一张 当播放到最后一张时,无缝切换到

    2024年01月20日
    浏览(57)
  • 利用级联选择器实现省市区三级联动【vue + elementUI Plus | uViewUI】

    行政区划代码数据下载 github 链接 首先获得省市区三级联动数据 pca-code.json 放置在项目文件夹内 数据格式如图: elementUI 级联选择器 props elementui 级联选择器api提供 props 将value,label,children指定为当前数据的自定义属性值 通过 :props=“cityProps” 2. getCheckedNodes 绑定值变化时触

    2024年02月09日
    浏览(61)
  • vue + element 实现鼠标左右滑动效果

    我用了element中的走马灯+overflow-x: auto; html (复制后格式化一下) js this.$refs.entrance.setActiveItem(index); 手动切换当前展示的索引

    2024年02月04日
    浏览(37)
  • 手写类似于BetterScroll样式的左右联动菜单 uni-app+vue3+ts (使用了script setup语法糖)

     注意:在模拟器用鼠标滚动是不会切换光标的,因为使用的是触摸滑动。【自定义类型贴在最后了】 script 部分如下:  template部分如下: scss样式:  category.d.ts main-arr.d.ts  

    2024年02月05日
    浏览(49)
  • Vue+ELementUI主页布局----侧边栏布局(el-aside)

    第一节Login.vue登录表单知识:  Element-UI+vue实现登录表单_我爱布朗熊的博客-CSDN博客 具体Element-UI地址: Element - The world\\\'s most popular Vue UI framework   目录 一、布满整个页面 二、主页Header布局 三、主页左侧带单布局 四、axios请求拦截器添加token,保证拥有获取数据的权限 五、发

    2024年02月02日
    浏览(41)
  • 【uniapp+vue3+u-picker】获取中国省市区数据结构,省市区数据三级联动json文件完整版,已实现三级联动效果+省市区街道数据四级联动json文件完整版,已实现四级联动效果

    前言: 这个功能的实现,中间耽误了几天,在大佬的帮助下终于实现效果,匿名感谢xx大佬 要实现的效果如下: 1、首先需要获取省市区的数据,不考虑后端返数据,自己使用json文件的话,需要获取到完整的中国省市区数据 有个很不错的github源码可供参考,Administrative-divi

    2024年02月04日
    浏览(76)
  • vue+elementui实现app布局小米商城,样式美观大方,功能完整

    目录 一、项目效果在线预览 二、效果图 1.首页效果图 2.分类,动态分类+商品数据根据所属分类动态切换 3.购物车,动态添加购物车(增、删、改、查) 4.我的 5.登录注册 6.商品详情 7.搜索(动态模糊搜索、搜索历史记录) 8.提交订单-商品详情(单个商品) 9.提交订单-购物

    2024年02月15日
    浏览(87)
  • 前端vue可以左右滚动的切换的tabs tabs选项卡 滑动动画效果 自动宽度

    前端vue可以左右滚动的切换的tabs tabs选项卡 滑动动画效果 自动宽度, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:           #### 使用方法 ```使用方法 swiperTabList: [\\\"2023-06-10\\\",\\\"2023-06-11\\\",\\\"2023-06-12\\\",\\\"2023-06-13\\\",\\\"2023-06-14\\\",\\\"2023-06-15\\\"], //导航列表 swiperTabIdx:

    2024年02月08日
    浏览(46)
  • 记录--左右菜单联动

    对于左右菜单联动的需求是很常见的在小程序里,主要表现为: 点击左侧的菜单栏,右侧会切换到对应的内容区域 滑动右侧的内容,左侧会自动切换到对应的菜单项 主要利用的是 scroll-view标签,以及相关的一些API,可参考:uniapp.dcloud.net.cn/api/ui/node… 去获取当前的所有节点

    2024年02月19日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包