vue打印功能遇到的问题(1)分页

mounted() {
    /**
     * 总结:
     * 1. insertBefore 插入的元素必须是 DOM对象;
     * 2. 插入元素之后,父节点下的children 已经发生改变,需要额外处理
     * 3. 插入的个数 * 次数 + 第几个元素 * (次数+1)-1
     * 4. addDivNum * count + positionNum * (count + 1) - 1 === i
     * 5. 第一次:2*0+12*1-1=11  i=11的是 是第十二个元素 插入
     * 6. 第二次: 2*1+12*2-1=25  i=25 则是第26个元素 但是之前插入过两个已经算进去DOM元素 所以应该是在第26个元素插入 +2 +4 +6 +8循环得
     * 7. 用forEach(值固定)时无法判断this.$refs.ticket.children.length   for(值不固定) 可以实时更新length的长度
     */
    this.$nextTick(() => {
      const that = this;
      const childs = this.$refs.ticket.children;
      let count = 0; // 计数插入元素次数
      let addDivNum = 2; // 需要插入 div的个数
      let positionNum = 12; // 在第几个元素后面插入的数
      for (let i = 0; i < this.$refs.ticket.children.length; i++) {
        const item = this.$refs.ticket.children[i];
        if (addDivNum * count + positionNum * (count + 1) - 1 === i) {
          if (item.nextElementSibling) {
            for (let i = 0; i < addDivNum; i++) {
              const div = document.createElement("div");
              div.style.pageBreakAfter = "always";
              that.$refs.ticket.insertBefore(div, item.nextElementSibling);
            }
            // 添加一组div后 计数+1
            count++;
          } else {
            const div = document.createElement("div");
            div.style.pageBreakAfter = "always";
            that.$refs.ticket.append(div);
          }
        }
      }
    });
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值