在页面上需要裁减和缩放一张图片是一个常见问题。缩放图片比较简单的方法是使用image的hight和width属性。同样地,裁剪图片可以通过将图像设置为元素背景并设置元素的高度和宽度来完成。无论如何,缩放和裁剪图像都稍微复杂了一点。如果这需要经常做,还是把图像的裁剪和缩放交给一个类(class)好一些。为此,我写了这个裁剪缩放器(Cropenscaler)。
思路是这样的:创建一个特定大小的div元素,这是一个嵌套的div,在其中显示相对定位的图像。我发现定义默认图像大小和裁剪位置的图像数据哈希表非常有用。这些数值可以在帧建立的时候进行调整,这时候,无所谓结果帧如何缩放,图像都被定位于同样的位置。
首先来检测一下所需也要的CSS类:
|
1
2
3
4
5
6
7
8
9
|
.croppenscaler { display: inline-block; overflow: hidden; } .croppenscaler img { position: relative; border: none; } |
上面需要说明的重要属性是croppenscaler的overflow使用。这暴政了首帧具有已设定的大小。嵌套的图像采用相对定位。所有其他的CSS属性需要写入style属性中,因为他们必须在帧建立的时候计算得出。
下面的Javascript使用了Prototype框架,但使用JQuery或别的javascript库也能完成同样的事情。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
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()函数,将结果元素插入到页面上。
|
1
2
3
4
5
6
7
|
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()); } |
上面的代码将产生下面这群猫(的图像效果)。




Copyright@ 2011-2016 版权所有:大连千亿科技有限公司 辽ICP备11013762-3号 google网站地图 百度网站地图 网站地图
公司地址:大连市沙河口区中山路692号辰熙星海国际2317 客服电话:0411-39943997 QQ:2088827823 37482752
法律声明:未经许可,任何模仿本站模板、转载本站内容等行为者,本站保留追究其法律责任的权利! 隐私权政策声明