如何检测CSS3大小调整事件

cczfrluj  于 11个月前  发布在  CSS3
关注(0)|答案(6)|浏览(128)

CSS3 resize属性可以分配给任意元素。我正在寻找一种方法来检测这样的大小,比如说,divs(我不介意它目前只在Firefox中工作):

div {
  resize: horizontal;
  overflow: hidden;
}

不幸的是,onresize事件似乎没有在div上触发。我如何在JavaScript中检测到这样一个用户示例化的大小调整发生了?

6ovsh4lw

6ovsh4lw1#

调整大小就像一种风格的改变。因此,它可以用MutationObserver观察到。更具体的ResizeObserver可能更好:

let observer = new ResizeObserver(function(mutations) {
  console.log('mutations:', mutations);
});

let child = document.querySelector('textarea');
observer.observe(child);
<textarea></textarea>
plicqrtu

plicqrtu2#

DOMAttrModified事件从这个答案中得到的想法,this jsFiddle似乎在Firefox 8中工作(如果你打开控制台)。

kkbh8khc

kkbh8khc3#

由于resize事件显然不起作用(至少目前是这样),您可以尝试以下替代选项之一:
1.使用mousedownmousemove和/或mouseup的组合来判断div是否正在调整大小。如果你想要真正的细粒度控制,你可以检查每个mousemove事件,div是否调整了大小。如果你不需要,你可以根本不使用mousemove,而只是测量mousedownmouseup中的div,并找出后者是否调整了大小。
1.每200 ms左右轮询一次(取决于您的需要),并将当前大小与上次已知大小进行比较。参见setTimeout()

zaqlnxep

zaqlnxep4#

可以使用css-element-queries polyfill的ResizeSensor
https://github.com/marcj/css-element-queries
它允许您调用JavaScript函数来改变所有类型元素的大小,而不仅仅是window。它设置了一个真实的的传感器,而不是JavaScript setTimeout轮询。
这样使用:

new ResizeSensor($('#myelement'), function() {
    console.log("myelement's size has changed");
});

支持的浏览器包括:所有包括IE6+。

nnsrf1az

nnsrf1az5#

这似乎对我很有效:

$("body").on('mousedown mousemove', ".resizeItem", function () {
    console.log($(this).height());
})

“使用mousedown、mousemove和/或mouseup的组合”
根据Felix的回答。
特别是在将自定义搜索结果面板与Dev Extremes Scroll View相结合并且您希望完全控制它时非常有用。

$("body").on('mousedown mousemove', ".scrollContainer", function () {
    var h = $(this).height() - 20;
    $(".scrollArea").dxScrollView('instance').option('height', h);
});
puruo6ea

puruo6ea6#

根据this site,它只能在internet explorer9中工作。
试试这个小提琴:http://jsfiddle.net/maniator/3Zva3/

相关问题