- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了一个指令来旋转和调整(缩放)图像。我目前正在通过操纵元素的内联样式来完成此操作。我正在使用 css 转换(rotate
和 scale
)。
我目前旋转图像的方法是以左上角为原点旋转它,然后我将图像移回 View 中,并留有边距。对于缩放,我还通过将原始尺寸乘以缩放因子来重新计算图像的新有效尺寸。
我有缩放和旋转功能,但非标准旋转不能很好地位于父容器内。例如,当旋转 180 度时,图像下方有一堆额外的空白,无缘无故地扩展了它所在的 div。
指令:
function directive() {
return {
restrict: 'A',
scope: {
options: '='
},
link: link
};
function link(scope, element, attributes) {
element.bind('load', function() {
if (!scope.options.originalSize) {
element.removeAttr('style'); //clear all previous styling
//workaround for IE (it's dumb, and I'd rather just use this element (element[0]) data)
var img = document.createElement('img');
img.src = element[0].src;
scope.options.originalSize = {
height: img.height,
width: img.width
};
scope.options.scaling = 1.0;
scope.options.rotation = 0;
}
transformWithCss();
});
scope.$watch('options.rotation', transformWithCss);
scope.$watch('options.scaling', transformWithCss);
function transformWithCss() {
if (!scope.options || !scope.options.originalSize)
return;
var width = scope.options.originalSize.width * scope.options.scaling;
var height = scope.options.originalSize.height * scope.options.scaling;
var marginTop, marginLeft;
var effectiveRotation = (scope.options.rotation % 360 + 360) % 360;
switch (effectiveRotation) {
case 0:
marginTop = 0;
marginLeft = 0;
break;
case 90:
marginTop = 0;
marginLeft = height * scope.options.scaling;
break;
case 180:
marginTop = height * scope.options.scaling;
marginLeft = width * scope.options.scaling;
break;
case 270:
marginTop = width * scope.options.scaling;
marginLeft = 0;
break;
default:
//how did we get here? throw exception?
alert("something went wrong with rotation");
break;
}
element.css({
"transform": 'scale(' + scope.options.scaling + ') rotate(' + scope.options.rotation + 'deg) ',
"width": width + 'px',
"height": height + 'px',
"transform-origin": '0px 0px',
"margin-top": marginTop + 'px',
"margin-left": marginLeft + 'px'
});
}
}
}
在 HTML 中的用法:
<div class="parent-div col-md-10 col-lg-10">
<p>Some other content</p>
<div class="image-holder">
<img scaling-rotating-image="" options="ctrl.imageOptions" src="//lorempixel.com/500/300/cats/" />
</div>
</div>
A plunker demo .注意不同颜色的边框。
为什么我的指令不能优雅地处理旋转?为什么它的父 div 在调整大小时会做一些很奇怪的事情?
最佳答案
感谢Todd's advice ,我通过使用 position: absolute
解决了我奇怪的空白问题。为了弥补这一点,我还必须重新调整父容器的尺寸。这是更新后的 transformWithCss
函数:
function transformWithCss() {
if (!scope.options || !scope.options.originalSize)
return;
var width = scope.options.originalSize.width * scope.options.scaling;
var height = scope.options.originalSize.height * scope.options.scaling;
var marginTop, marginLeft;
var parentHeight, parentWidth; //to redimension the parent container
var effectiveRotation = (scope.options.rotation % 360 + 360) % 360;
switch (effectiveRotation) {
case 0:
parentHeight = height * scope.options.scaling;
parentWidth = width * scope.options.scaling;
marginTop = 0;
marginLeft = 0;
break;
case 90:
parentHeight = width * scope.options.scaling;
parentWidth = height * scope.options.scaling;
marginTop = 0;
marginLeft = parentWidth;
break;
case 180:
parentHeight = height * scope.options.scaling;
parentWidth = width * scope.options.scaling;
marginTop = parentHeight;
marginLeft = parentWidth;
break;
case 270:
parentHeight = width * scope.options.scaling;
parentWidth = height * scope.options.scaling;
marginTop = parentHeight;
marginLeft = 0;
break;
default:
//how did we get here? throw exception?
alert("something went wrong with rotation");
break;
}
element.css({
"position": "absolute", //absolute positions removes weird whitespace
"transform": 'scale(' + scope.options.scaling + ') rotate(' + scope.options.rotation + 'deg) ',
"width": width + 'px',
"height": height + 'px',
"transform-origin": '0px 0px',
"margin-top": marginTop + 'px',
"margin-left": marginLeft + 'px'
});
//redimension parent container
element.parent().css({
"height": parentHeight + 'px',
"width": parentWidth + 'px'
});
}
更新工作 plunker .
关于javascript - 旋转图像不能很好地放置在父容器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33920634/
下类时合上笔记本电脑。当我回到家并打开它时,它已重新启动。现在,当我打开 Titanium Developer 时,它会立即崩溃。 所以我现在也打不开。关于如何调试或找出问题所在的任何想法? 甚至尝试
我们想共享运行时项目二进制文件。所以每个团队成员都可以使用当前的工作版本。 在 SVN 中存储运行时二进制文件是否可以接受/很好? 最佳答案 不,不要将二进制文件存储在其源代码旁边(除非您有充分的理由
我在 PHP 中使用循环来显示 CMS 管理部分中的用户数据。每行(用户)都包含一些我想要连接到命令的图标(例如:编辑、删除等)。表的最后一行有空的输入字段,带有单个图标(命令),以允许添加新用户。这
如果这是一个新手问题,请原谅我,我昨天开始学习 Django,并且我尽量不要养成坏习惯,即我试图从一开始就以“django 方式”做事。 我有一个 View 接收二进制数据作为 http post 字
使用 swift 2.1 我正在寻找一种将非可选类型数组分配给可选类型数组的好方法,其中类型相同。这是我尝试过的一些方法: var foos: [Int?] = [] let bars: [Int]
James Gosling,加拿大计算机科学家,完成了 Java 的原始设计,并实现了 Java 最初版本的编译器和虚拟机,也是公认的 “Java 之父”。 Evrone 是一家企业软件开发公司,
我在两个项目上使用 Twitter Bootstrap,一个是静态 HTML 网站,另一个是 Rails 应用程序。当我在桌面浏览器上测试网站时,调整大小有效。但是当我在手机 [Nokia E72]
我可以使用全日历。但我有一个侧边栏,用户可以折叠它,然后内容框会变大,但是当用户这样做时,日历就不那么好了。 所以我正在考虑窗口调整大小功能,但这仅在浏览器窗口更改时才有效,那么当容器变大或变小时如何
我正在尝试使用 C# 和 LINQ 在数据库中查询每日活跃用户。我有一个运行良好的 SQL 查询。它在 u.UserId).Distinct().Count() } 测试后,当我必须选择 (
我目前正在开发部署目标为 7.1 的 iOS 应用程序。我的大部分测试都是在 iOS8 环境中执行的,没有任何问题。我连接了一个 iOS7 (5s) 测试设备,发现通过手机显示的 View 是 3.5
我有这样的代码: Floating left. Floating right. BlahBlah Container 允许我将页脚推到页面底部,但如果我想让左右栏跨越接触页脚的高度
从 PHP4 和 Cake 1.3 开始,我一直在使用 debug($data);在 CakePHP 中调试诸如模型输出之类的东西。 但是,自从升级到 PHP5.4 后,我注意到 debug($dat
我在Canvas上画我的游戏,一切都是上帝,但我把它改成了JPanel,但现在它不能正常工作,这是代码,你可以复制它们,你就会看到问题出在哪里(我有一个菜单,单击按钮后它应该创建新线程,我想在那里画画
我尝试用 scrapy 抓取一页。我用 FireXpath(一个 firefox 插件)找到了 xpath,它看起来不错。但是对于 Scrapy,我没有得到任何结果。 我的 python 程序如下所示
我想在页面加载时加载 fancybox。它工作正常,但我对它的高度有疑问。假设页面的高度为 3000px,而 fancybox 的高度为 1500px。如果你想看到页面的最低部分,都应该向下滚动。不幸
IE 大小调整问题!?代码非常简单:我有一个 div,我想要一个占 DIV 100% 的文本框。它必须显示 div 的红线(如果我使用 height:100%, width:100% 它会侵 ecli
我有一组看起来像这样的代码: if(self.property == A) { [self.infoManager getThingA:^(NSString *thing, NSError *
我认为 git clone 使用 STDERR。 我现在想将它重定向到 STDOUT 以使用此 hack . 我遇到了一些问题(另外,我使用很棒的 stderred 库自动将 STDERR 着色为红色
我的问题是我的表单正在提交(到节点/express api),如果我console.log req.body(@ api),结果是一个空对象。但是,如果我在客户端上 console.log ,则序列化
我对 addon-sdk 还很陌生,并且遇到了一个对我来说无法解释的问题。到目前为止,我一直在使用 jpm run 来测试一切 - 并且一切都很好。现在,我即将完成我想要完成的任务,所以我想在“普通”
我是一名优秀的程序员,十分优秀!