html - 调整平移和旋转元素的大小时如何计算顶部和左侧
问题描述
我有一个可以拖动和调整 DIV 大小的系统。您可以从顶部抓取,它会从底部生长。从底部抓起,它从顶部向下生长。与左、右和角相同。
这一切都是通过 CSS 宽度/高度和 translate(x,y) 完成的,并且效果很好。
现在我正在添加旋转并使用这样的东西:
style="transform: translate(100px,100px) rotate(-30deg);width:100px;height:50px;"
同样,这一切都很好。
但是当我改变宽度或高度时,元素会向上/向下或向左/向右移动。
请参阅以下内容。绿色的 div 是原始的,红色的 div 扩展了宽度。你可以看到它是如何变化的。
<html>
<head>
<style>
body {
position: relative;
}
.thing {
position:absolute;
border: solid 1px #0f0;
transform: translate(100px, 100px) rotate(-30deg);
}
.thing2 {
position:absolute;
border: solid 1px #f00;
transform: translate(100px, 100px) rotate(-30deg);
}
</style>
</head>
<body>
<div class="thing" style="width:100px;height:50px;"></div>
<div class="thing2" style="width:150px;height:50px;"></div>
</body>
</html>
我知道我需要根据 trig 重新计算顶部/左侧,但还没有找到正确的计算来使其工作。
另外,我想保持围绕中心的旋转枢轴,所以我不能只将枢轴点更改为其中一个角。
解决方案
这里有一个包装器的解决方案
<div class="thing-wrapper">
<div class="thing left-top">expand right</div>
</div>
<div class="thing-wrapper">
<div class="thing right-top">expand left</div>
</div>
<div class="thing-wrapper">
<div class="thing left-bottom">expand top</div>
</div>
<div class="thing-wrapper">
<div class="thing right-bottom">expand bottom</div>
</div>
.thing-wrapper {
position: absolute;
}
.thing {
border: solid 1px #0f0;
width: 100px;
height: 100px;
position: absolute;
transform: translate(100px, 100px) rotate(-44deg);
transition: 2s;
}
.thing.expand-left:hover,
.thing.expand-right:hover{
width: 200px !important;
height: 100px !important;
}
.thing.expand-top:hover,
.thing.expand-bottom:hover{
width: 100px !important;
height: 200px !important;
}
.expand-left {
left: 0;
top: 0;
transform-origin: left top;
}
.expand-right {
right: 0;
top: 0;
transform-origin: right top;
}
.expand-top {
left:0;
bottom: 0;
transform: translate(300px, 300px) rotate(-44deg);
transform-origin: left bottom;
}
.expand-bottom {
left: 0;
right: 0;
transform: translate(300px, 300px) rotate(-44deg);
transform-origin: left top;
}
https://jsfiddle.net/dt7phfk9/32/
将事物定位在包装器中仅用于向一个方向扩展。
推荐阅读
- spring-boot - @PreAuthorization 与自定义 JWT 属性的比较
- ruby-on-rails - 基于 current_user 序列化 Rails 6 模型
- powershell - Powershell 禁用匿名 FTP 并启用身份验证
- python - 如何在numpy中实现多个ifelse
- c# - 使用 MVC 从 URL 构建基于 Id 的布局 ViewModel
- javascript - 在反应语义-ui中为每个选定的下拉项着色
- python - 关于pandas中条件计算的问题
- c# - 在 Lucene.Net 中搜索具有值(x 或 y 或 z)等的字段名
- apache-kafka - Kafka 生产者抛出错误尝试从状态 IN_TRANSACTION 到状态 IN_TRANSACTION 的无效转换
- c++ - 除了使用 PrintDlg() 之外,还有其他方法可以获取打印机的端口号吗