這裏的一個出發點。我基本上在右上角創建了一個自定義大小調整圖標。然後,我使用'mousedown','mousemove'和'mouseup'事件來跟蹤調整大小活動。您可以使用「拖曳」和相關事件來做類似的事情。
請注意'mousedown'位於縮放圖標上,而'mousemove'和'mouseup'位於文檔正文(或可調整大小的div後的其他較大元素)上。
爲了簡單起見,我在JavaScript中對寬度和高度進行了硬編碼。這意味着這些價值存在於兩個不同的地方,這是不好的。你應該只把它們放在JavaScript中,或者只放在CSS中,而不是像我一樣。
我需要將可調整大小的div放入充滿人體的容器中。否則,可調整div以外的'mousemove'事件未被註冊。如果您已將其他內容「隱藏」在絕對定位的可調整大小的元素後面,則這可能不是問題。
對於您的信息:我最初也嘗試使用本機調整大小功能。我使用transform: rotate(-90deg)
將調整大小的角落移動到右上角,然後放入一個內部div與transform: rotate(90deg)
以使內部內容再次右移。但是,雖然這將調整大小的角落放在正確的位置,但調整大小本身已經完全搞砸了,因爲鼠標移動和實際調整大小本身已經偏離了90度。用文字描述有點難,但可以這麼說,沒有一些重大的工作(或者可能是一些精彩的代碼或隱藏的功能),我無法讓這個策略起作用。
var
doc = document,
ht = 400,
wd = 400,
main = document.querySelector("#resizable"),
x, y, dx, dy;
var startResize = function(evt) {
x = evt.screenX;
y = evt.screenY;
};
var resize = function(evt) {
dx = evt.screenX - x;
dy = evt.screenY - y;
x = evt.screenX;
y = evt.screenY;
wd += dx;
ht -= dy;
main.style.width = wd + "px";
main.style.height = ht + "px";
};
rsz.addEventListener("mousedown", function(evt) {
startResize(evt);
doc.body.addEventListener("mousemove", resize);
doc.body.addEventListener("mouseup", function() {
doc.body.removeEventListener("mousemove", resize);
});
});
#container {
position: absolute;
border: solid red 1px;
margin: 0;
height: 100%;
width: 100%;
}
#resizable {
display: block;
font-size: 9pt;
position: absolute;
bottom: 50px;
left: 20px;
padding: 10px;
min-height: 0;
min-width: 0;
border: solid 1px black;
width: 400px;
height: 400px;
overflow-x: auto;
overflow-y: hidden;
}
#rsz {
position: absolute;
right: 0;
top: 0;
width: 20px;
height: 20px;
background-color: rgba(255, 0, 0, 0.5);
}
#original {}
<div id="container">
<div id="resizable">
<div id="rsz"></div>
(some content)
</div>
</div>
如果運行堆棧溢出內此代碼段,您需要通過單擊「全頁面」點擊「運行代碼片段」後,擴大運行視圖區域。
是啊,認爲這可能是我可以得到的最好的。沒想過旋轉div。可能會這樣做。否則這是一個很好的選擇。謝謝! – kklein623
恥辱這可以開箱即用,任何機會Wc3會添加它? – SuperUberDuper
你能用這個做一個npm包嗎? – SuperUberDuper