英文原文:Scale and Crop an Image using Javascript and CSS

在页面上需要裁减和缩放一张图片是一个常见问题。缩放图片比较简单的方法是使用image的hight和width属性。同样地,裁剪图片可以通过将图像 设置为元素背景并设置元素的高度和宽度来完成。无论如何,缩放和裁剪图像都稍微复杂了一点。如果这需要经常做,还是把图像的裁剪和缩放交给一个类 (class)好一些。为此,我写了这个裁剪缩放器(Cropenscaler)。

思路是这样的:创建一个特定大小的div元素,这是一个嵌套的div,在其中显示相对定位的图像。我发现定义默认图像大小和裁剪位置的图像数据哈希表非常有用。这些数值可以在帧建立的时候进行调整,这时候,无所谓结果帧如何缩放,图像都被定位于同样的位置。

CSS Classes

让我们先检验一下必要的 CSS 类:

.croppenscaler {
display: inline-block;
overflow: hidden;
}
.croppenscaler img {
position: relative;
border: none;
}

Croppenscaler 类:

下面的Javascript使用了Prototype框架,但使用JQuery或别的javascript库也能完成同样的事情。

var imageData = {
kittah: { width:900, top:-175, left:-165, url: '/blogs/assets/jcato/images/Kittah.jpg' },
}; var Croppenscaler = Class.create();
Croppenscaler.prototype = {
initialize: function(options) {
var image = imageData[options.image];
this.url = image.url;
this.frameHeight = options.height || 400;
this.frameWidth = options.width || 300; var scale = this.frameWidth / 300; this.imageWidth = (image.width) * scale;
this.positionTop = (image.top) * scale;
this.positionLeft = (image.left) * scale;
}, buildFrame: function() {
var img = new Element('img',{src:this.url, 'class':'zoom'});
img.setStyle({
width: this.imageWidth+'px',
top: this.positionTop+'px',
left: this.positionLeft+'px',
}); var frame = new Element('div',{'class':'croppenscaler'});
frame.update(img);
frame.setStyle({
height:this.frameHeight+'px',
width:this.frameWidth+'px',
});
return frame;
},
};

这个类有两个函数。构 造器为结果帧获取了选项哈希表;图像的关键帧和帧的高度与宽度。在这个版本中,构造器引用了imageData哈希表来获取图像细节用于显示,但他们也能 通过传递参数到函数中同样实现。重要的是构造器能够访问到帧的高度与宽度。当以默认宽度显示的时候,则为默认的图像宽度和top与left属性(图像左上 角的位置

buildFrame() 函数计算了尺寸并使用他们构建了帧div。使用嵌套的图像来缩放以适应这个帧,后进行定位同样来适应这个缩放。

接下来使用这个类,使用至少包括一个图像关键帧、可选高度和宽度的哈希表创建新的Croppenscaler ,调用buildFrame()函数,将结果元素插入到页面上。

var loadImages = function() {
$('cats').insert(new Croppenscaler({image:'kittah'}).buildFrame());
$('cats').insert(new Croppenscaler({image:'kittah',height:300}).buildFrame());
$('cats').insert(new Croppenscaler({image:'kittah',width:400,height:250}).buildFrame());
$('cats').insert(new Croppenscaler({image:'kittah',width:200,height:300}).buildFrame());
$('cats').insert(new Croppenscaler({image:'kittah',width:100,height:150}).buildFrame());
}

面的代码将产生下面这群猫(的图像效果)。

转载自:http://www.oschina.net/translate/both_scale_and_crop_an_image_using_javascript_and_css

使用JavaScript 和 CSS 实现图像缩放和剪裁(转)的更多相关文章

  1. 网站前端性能优化之javascript和css

    之前看过Yahoo团队写的一篇关于网站性能优化的文章,文章是2010年左右写的,虽然有点老,但是很多方面还是很有借鉴意义的.关于css的性能优化,他提到了如下几点: CSS性能优化 1.把样式表置于顶 ...

  2. 20 个具有惊艳效果的 jQuery 图像缩放插件

    jQuery相对与Flash的魔力已经贯穿整个网络.尽管,Flash层被认为是用于网页设计的首选,然而随着jQuery的出现,以及他的酷似Flash的交互式特效使得网页更加的优雅——Flash开始靠边 ...

  3. CSS背景图像的简单响应

    本文设有很多,最理想的解决方案,响应图像只是其中之一.我们建议您查看不同的方法,然后再选择一个特定的响应图像解决方案,包括这两个:如何避免重复下载响应图像中选择响应图像解决方案. 大家都在谈论的的sr ...

  4. 前端html、Javascript、CSS技术小结

    简单地总结了一下前端用过的html.javascript.css技术,算是清点一下,做个大略的小结,为进一步的学习给个纲领. 一.HTML 由于HTML5的兴起,简单地判断一个网页是否是html5网页 ...

  5. 20款有用的JavaScript和CSS库

    Web开发与设计已经发展达到了新的高峰.创建一个网站并不是那么简单了,因为它使用的是几年前.今天是时间创造有吸引力的网站,不仅吸引了游客的关注也让他们订婚.另外,和功能的有吸引力的功能添加到该网站不应 ...

  6. 3 月 15 个有意思的 JavaScript 和 CSS 库

    Tutorialzine 旨在让你了解最新最酷的 Web 发展趋势.这就是我们每个月为何都会发布一些我们偶然发现并认为值得你关注的优秀资源的原因. BasicScroll https://github ...

  7. JavaScript和CSS实用工具、库与资源

    JavaScript和CSS实用工具.库与资源 JavaScript 库 Particles.js  - 一个用于在网页上创建漂亮的浮动粒子的 JS 库: Three.js  - 用于在网页上创建 3 ...

  8. 10个有趣的javascript和css库(2019年5月最新)

    我们的使命是让您了解最新和最酷的Web开发趋势.这就是为什么我们每个月都会发布一些精选的资源,这些资源是我们偶然发现并认为值得您关注的. 1.Tessaract.js 强大的javascript(节点 ...

  9. 9 个基于JavaScript 和 CSS 的 Web 图表框架

    COMSHARP CMS 写道:jQuery, MooTools, Prototype 等优秀的 JavaScript 框架拥有各种强大的功能,包括绘制 Web图表,使用这些框架以及相应插件,我们可以 ...

随机推荐

  1. mybatis模糊查询语句

    articletitle like concat('%',#{articletitle},'%')

  2. android.app.FragmentManager 与 android.support.v4.app.FragmentManager带来的若干Error

    Fragment是activity的界面中的一部分或一种行为.你能够把多个Fragment们组合到一个activity中来创建一个多面界面而且你能够在多个activity中重用一个Fragment.你 ...

  3. getLastSql()用法

    getLastSql()用法 $User = M("User"); // 实例化User对象 $User->find(1); echo $User->getLastSq ...

  4. android 利用cmdline,将參数从preloader传递到kernel

    以定义參数 cus_param 为例.int型变量. 1. Preloader部分 Platform.h(mediatek\platform\[$platform]\preloader\src\dri ...

  5. 安装Ubuntu 13.04后要做的六件事

    2013-05-07 09:23    最新版本的Ubuntu已经新鲜出炉:Ubuntu 13.04,代号为Raring Ringtail.作为幕后开发Ubuntu Linux的公司,Canonica ...

  6. 线程池c3p0和dbcp2的配置初始化实例

    一.c3p0 public class ConnectionManager { public static ComboPooledDataSource dataSource; static { try ...

  7. mysql的join操作

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 ...

  8. JavaScript:Object.prototype.toString进行数据类型判定

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Obje ...

  9. fft分析前后频谱数据

    正弦信号输入 input 输入的原始信号 short [128] fir 滤波后的输出信号 SHORT [128] fft 傅里叶变换后的freq数据  float [128] rmroise 去除底 ...

  10. Qt 检验器 三种典型类的用法

    Qt提供了三个内置验证器类: QDoubleValidator, QIntValidator, QRegExpValidator. QDoubleValidator类: 提供了对浮点数的范围检查. Q ...