javascript - 在 Vuejs 中计算 DOM 元素之间距离的最佳方法是什么?

标签 javascript vue.js vuejs2

我正在构建一个从数据生成 pdf 文件的工具,我需要构建两种格式:105mm * 148mm 和 105mm * 210mm。所以我得到了整个文档,现在是我插入分页符的时候了。我用一个简单的类来做到这一点:

.page-break { display: block; page-break-before: always; }

现在我必须将这个类插入到我的 v-for 循环中。所以一个基本的想法是计算一个区间,比如每个索引都是 6 的倍数,我插入一个。但这不是最好的方法,我想在内容超过 90mm 时插入一个中断。

为了做到这一点,我想计算 2 个断裂之间的距离,如果距离接近 90 毫米,则插入一个新断裂。但是,我找不到访问我的动态 DOM 元素的方法...

所以问题很简单:如何计算这个距离?或者如果有更好的方法来实现我的目标,我可以改进什么?

最佳答案

我相信您在每个 v-for 中添加了一个 div/component,并且您可以为每个 div 添加一个唯一的 id。现在下面的方法可以给你一个 div 的高度,以 px 为单位,你将有一些方法将 px 转换为 mm

如果您使用 jquery , 你可以这样做

$('#nthDiv').height();

如果没有,您可以执行以下操作:

inner height :

document.getElementById('#nthDiv').clientHeight;

outer height :

document.getElementById('#nthDiv').offsetHeight; 

如果您有以下代码:

<div v-for="(item, index) in items" :class="{'page-break': isBreakNeeded(index)}" :id="index + 'thDiv'">
   ///Your code
</div>

您需要添加以下方法:

isBreakNeeded (index) {       
   var height = 0
   do {
      index -= 1;
      height += document.getElementById('#' + index + 'thDiv').offsetHeight; 
      } while (index >= 0 || pageBreakAdded[index] == true)
      if(height > threshold){
         pageBreakAdded[index] = true
         return  true
      }
      else{
         return  false
      }
}

您还需要在 vue 元素的数据属性中添加以下散列,它将跟踪您添加分页符的索引:

pageBreakAdded: {}

关于javascript - 在 Vuejs 中计算 DOM 元素之间距离的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40994073/

相关文章:

javascript - 如何封装 AngularJS 函数但仍使其可测试

javascript - 行高在 Mac 上不是垂直居中文本,但在 Windows 上看起来不错

Laravel 护照 : Manually create access token

javascript - 一个具有多个模板的 VueJS 组件

CSS 变量和 SCSS 混入

vuejs2 - Vuex 存储状态未定义

javascript - 如何在 Bootstrap 模式对话框中嵌入外部 pdf?

javascript - 将自定义数据传递给 vue-router 中的 `$router.push()`

laravel - 在<a>标签的href中编写VueJS数据绑定(bind)表达式

javascript - 用jQuery询问<div>是否有背景图片?