【发布时间】:2017-01-24 15:51:20
【问题描述】:
我正在开发一个时间线清理器,其中有一个标记,它可以左右拖动,并带有一个 ::after 元素样式。我需要能够根据存在多少层来设置行的高度,但我看不到如何访问 DOM 元素。我做了一些搜索,虽然有一些解决方案是通过向 body 添加元素,但与直接修改 css 相比,这很快就会变得笨拙和混乱。
我这里有一个演示:http://codepen.io/ajhalls/pen/QdgXBQ
为简单起见,我将其简化为尝试在左右拖动滑块时访问高度。虽然这使用了 jQuery,但我当然也可以使用任何其他使用纯 JS 的解决方案。
$(".scrubber-icon").draggable({
axis: 'x',
containment: "parent",
drag: function( event, ui ) {
var scrubberValue = ($(".scrubber-icon").position().left-15);
$(".scrubber-icon").css( "::after", "height", scrubberValue);
$("#text").html("position:" + scrubberValue);
}
});
【问题讨论】:
-
使用JS不能轻易修改
::after伪元素。在这种情况下最好使用实际的 dom 节点,虽然我有点不确定你要说实话...... -
谢谢,你能给我一个修改元素而不是 addRule 或类似方式的例子吗?我希望能够让红线越来越短,不是通过添加更多规则,而是修改现有规则。
-
一个后元素可以被另一个节点替换,然后你就可以做你想做的事了。为什么需要
::after? -
因为这两个应该使用jQueryUI draggable()一起移动,最简单的方法是设置一个元素的样式,我现在不知道如何修改它的高度。
-
我不确定您要完成什么,我检查了您的代码笔并阅读了您的问题两次,但我无法理解您要修改的高度。为什么不简单地使用一个节点而不是和之后并添加
pointer-events: none以允许拖动父级而不干扰?
标签: javascript jquery css