在父元素的特定位置查找元素的最快方法
fastest way to find and element at a specific location in the parent
我有一个横向列表
<section class="viewport">
<ul class="item-list">
<li class="item">A</li>
<li class="item">B</li>
...
</ul>
</section>
该列表可在水平方向(左/右)移动。每个项目的宽度是随机的!
现在,假设移动了item-list
元素。问题是,哪个item
在视口的中间?一个可能的解决方案(未测试)是计算每个元素的偏移量,减去移动等等。但是性能是非常重要的,所以我想知道是否有人知道更好的解决方案?
更新:作为一个额外的问题,如何删除在jsfiddle中看到的item
s之间的空格?
附加问题的答案:删除列表项元素之间的空格。当列表项(或任何东西)被内联时,它们被视为文本,它们之间的空白创建了一个实际的空间。删除它们的唯一方法(除了使用其他方法,如浮动)是删除一个结束标记和另一个开始标记之间的空格。
当我需要内联列表没有空格时,我经常做的是将结束的li移到开始的li之前。它看起来不是很好,但我认为它是最清晰的可用选项。
<ul>
<li>A
</li><li>B
</li><li>C
</li><li>D
</li>
</ul>
至于找出中间元素,遍历列表,添加每个项目的宽度,直到UL的widthSum + offset大于视口宽度的一半。
我在这里创建了一个更新的提琴:http://jsfiddle.net/x9v3W/5/
下面是基本代码:var width = 0,
targetWidth = $('.viewport').width(),
offset = $('.item-list').offset().left,
$item = $('.item-list :first-child');
while ($item && width + offset < targetWidth / 2) {
width += $item.width();
$item = $item.next();
}
alert($item.prev().text());
请注意,这段代码并没有考虑到所有内容(如边框、填充、边距等),因此您可能需要根据最终使用的HTML调整代码。这应该会让你对技术本身有一个概念。
这是一种方法,根据从项目中间到中间偏移量的距离(由您在注释中提供)对项目进行排序,然后获得第一个项目
http://jsfiddle.net/x9v3W/6/middleOffset = 400; // precalculated, from comments
middleItem = $(".item").get().sort(function(a,b){
var $a = $(a), $b = $(b);
var aDiff = Math.abs(($a.offset().left +$a.width()/2) - middleOffset);
var bDiff = Math.abs(($b.offset().left +$b.width()/2) - middleOffset);
return aDiff == bDiff ? 0 : aDiff > bDiff ? 1 : -1;
});
$(middleItem).css("background-color","blue");
另外,根据在评论中提供的问题的答案,修复了您在小提琴中的空间问题。
相关文章:
- 用于检查数组中是否存在元素的javascript自定义方法
- 从数组中删除元素的最佳方法是:javascript/jquery
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 任何一种简单的方法都可以将带有onload的元素作为目标
- 如何向Selectize元素添加渲染和创建方法
- 他们是如何使用angular/jqLite find()方法按属性名称和值选择元素的?ng conf 2015
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 列出没有 mysql 的元素的最佳方法是什么
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 元素.appendChild()插入IE.变通方法?(与innerText与textContent相关)
- 选择具有值数组的所有元素的最有效方法
- 有什么方法可以在下一个元素上进行追加吗
- 使用javascript查找元素位置的最快方法
- javascript在html元素方法运行setTimeout后返回此消息
- 如何在 motools 中使用元素方法变形或补间延迟或设置杜累
- Safari javascript错误,试图定义“;删除“;元素方法
- 产卵,拖动SVG元素-方法
- 从列表中重新定义CRUD元素方法
- 在Angular / Ionic的父指令上触发DOM元素方法