英文原文: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. 转:VB用ADO连接SQLServer数据库

    '数据源信息常量 Public Const conn As String = "Provider = SQLOLEDB.1;Password = sa; UserID = sa; Initi ...

  2. BOM*创建工艺路线

    --工艺路线 DECLARE -- API input variables l_operation_tbl bom_rtg_pub.operation_tbl_type := bom_rtg_pub. ...

  3. 35 、HashSet详解

    HashSet特点 1.不能保证元素的排列顺序 2.没有重复元素 3.HashSet不是同步的,多个线程同时访问一个HashSet,需要通过代码来保持同步 4.集合元素可以是null 当向HashSe ...

  4. java FileI(O)nputStream为什么比BufferedI(O)utputStream慢?

    因为buffered多了一个缓冲区,读和写都是先把硬盘或者内存中的数据放到内存中一块缓存区域,到一定大小读写到硬盘或者内存   package io; import java.io.*; public ...

  5. JSP,PHP,Python,Ruby,Perl概要及各自特点

    JSP,PHP,Python,Ruby,Perl概要及各自特点 博客分类: JSP PHP Python Ruby Perl概要及各自特点 javascript  互联网技术日新月异,编程的语言层出不 ...

  6. jquery 常用api 小结2

    *一)jQuery常用方法API实战 (1)DOM简述与分类 A)DOM是一种标准,它独立于平台,语言,浏览器. B)如果项目中,你完全按照DOM标准写代码,你就能在各大主流的浏览器中操作标准控件. ...

  7. HttpSession 和URLRewriting

    在上面使用Cookie技术存储会话信息的时候发现Cookie存储的数据有限,而且每次需要客户端浏览器携带数据,导致网络的负载过大.因此如果需要存储相对大量的数据,那么可以直接将数据存储在服务器端,这样 ...

  8. iOS多线程常用类说明

    iOS的多线程,涉及到如下一些类,这里集中做个介绍,免得混淆. 1.NSTimer 很显然,这是定时器类 2.NSTask iOS 不支持 NSTask 在很多并发操作的时候,多线程太耗资源,也太危险 ...

  9. Redis总结(三)Redis 的主从复制(转载)

    接着上一篇,前面两篇我总结了<Redis总结(一)Redis安装>和<Redis总结(二)C#中如何使用redis> 所以这一篇,会讲讲Redis 的主从复制以及C#中如何调用 ...

  10. 【Unity】开发WebGL内存概念具体解释和遇到的问题

    自增加unity WebGL平台以来.Unity的开发团队就一直致力于优化WebGL的内存消耗. 我们已经在Unity使用手冊上有对于WebGL内存管理的详尽分析,甚至在Unite Europe 20 ...