vue中动态增减表单项,并实现新增时div的滑动条滑动到最底部

本文介绍了如何在Vue.js中实现点击按钮动态新增div元素,并将新增内容放置于列表底部,同时自动将滚动条定位到最后。代码示例展示了使用el-form和el-button组件创建表单,以及handleAdd和closeLadder方法来处理新增和删除操作。CSS样式确保了列表具有滚动条并保持固定高度。
摘要由CSDN通过智能技术生成

点击新增按钮,新增一条放到div的最后面,滑动条的位置也定位到最下面

 

1、 代码如下,dataList是个数组

<el-col :span="24">
            <el-form-item label="">
              <el-button  type="default" @click="handleAdd">新增</el-button>
            </el-form-item>
            <el-row class="overauto" id="scrolldIV">
              <el-col :span="22">
                 <el-form-item  v-for="(item,index) in dataList" :key="index" >
                   <div class="ladder">
                     <el-row>
                       <el-col :span="8">
                         <el-form-item :label="'名称' + (index+1)+':'" label-width="80px" >
                           <el-input placeholder="请输入名称" v-model="item.rangeName"></el-input>
                         </el-form-item>
                       </el-col>
                       <el-col :span="8">
                           <el-form-item label="开始日:" prop="startDate"  label-width="80px">
                             <el-date-picker
                               v-model="item.startDate"
                               type="date"
                               format="yyyy-MM-dd"
                               value-format="yyyy-MM-dd"
                               placeholder="选择开始日"
                               prefix-icon="iconfont icon-shijian"
                               clearable
                               >
                             </el-date-picker>
                           </el-form-item>
                       </el-col>
                       <el-col :span="8">
                           <el-form-item label="结束日:" prop="endDate"  label-width="80px">
                             <el-date-picker
                               v-model="item.endDate"
                               type="date"
                               format="yyyy-MM-dd"
                               value-format="yyyy-MM-dd"
                               placeholder="选择结束日"
                               prefix-icon="iconfont icon-shijian"
                               clearable
                               >
                             </el-date-picker>
                           </el-form-item>
                       </el-col>
                     </el-row>
                     <span ><i class="el-icon-error close-btn" @click="closeLadder(item)"></i></span>
                   </div>
                 </el-form-item>
              </el-col>

2、methods写新增,删除方法

 // 新增
      handleAdd(){
        let ln = this.dataList.length;
        if(ln>0){
          if(!this.dataList[ln-1].rangeName||!this.dataList[ln-1].startDate||!this.dataList[ln-1].endDate){
            this.$alert('请先填写完当前条件')
            return false
          };
          }
        this.dataList.push({
          pdRangeId:'',
          rangeName: this.dataList[ln-1].rangeName,
          startDate: this.dataList[ln-1].startDate,
          endDate:this.dataList[ln-1].endDate
        });
         //新增时滚动到div的最下面
         this.$nextTick(() => {
           var container = this.$el.querySelector('#scrolldIV');
           container.scrollTop = container.scrollHeight;
        })
      },
      // 删除
      closeLadder(item){
       var index = this.dataList.indexOf(item)
       if (index !== -1) {
         this.dataList.splice(index, 1)
       }
      },

 3、设置class,固定高度,超出高度显示滚动条

.overauto{ height:calc(100vh - 360px); overflow-y: auto;}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以通过监听滚动事件来判断滚动是否到达最右边,然后通过编程方式来触发页面跳转。具体实现可以参考以下代码: 1. 在 template 添加一个 div 容器,并给它添加一个 ref: ```html <div ref="scrollContainer" class="scroll-container"> <!-- 省略内容 --> </div> ``` 2. 在 script 监听 scroll 事件,并计算滚动是否到达最右边: ```javascript <script> import { defineComponent } from 'vue'; export default defineComponent({ mounted() { const container = this.$refs.scrollContainer; container.addEventListener('scroll', this.handleScroll); }, methods: { handleScroll(event) { const container = event.target; const scrollWidth = container.scrollWidth; // 容器的滚动宽度 const scrollLeft = container.scrollLeft; // 滚动的左侧距离容器左侧的距离 const clientWidth = container.clientWidth; // 容器的可见宽度 if (scrollWidth - scrollLeft === clientWidth) { // 滚动到达最右侧 this.jumpToDetailPage(); } }, jumpToDetailPage() { // 实现跳转到详情页的逻辑 }, }, }); </script> ``` 3. 在 jumpToDetailPage 方法实现跳转到详情页的逻辑,具体实现可以根据你的具体需求来编写,例如: ```javascript jumpToDetailPage() { // 获取当前路由信息 const currentRoute = this.$router.currentRoute.value; // 构造跳转的路由信息 const detailRoute = { name: 'DetailPage', params: { id: currentRoute.params.id, }, }; // 调用路由的 push 方法进行跳转 this.$router.push(detailRoute); }, ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

~犇犇~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值