- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《JavaScript图片切割效果
原文出处:/cloudgamer/archive/2008/07/21/imgcropper.html
序一(08/07/21)
很久之前就在一个网站的截取相片的功能中看到这个效果,也叫图片裁剪、图片剪切(设置一下也可以做出放大镜等类似的效果)。当时觉得很神奇,碍于水平有限,没做出来。前些日子突然想做一个透镜效果,就突然想到了这个效果,于是找出当年“珍藏”的代码决定一尝所愿。
序二(08/12/06)
自上一个版本的图片切割效果出来后,虽然也经常看到“框架开发这个如何如何容易”之类的评论,但也受到很多人的肯定,小弟在此感谢大家的支持。上一个版本由于是初次接触这类效果,而且是三个大功能一起开发,能力所限,所以仅仅是实现了效果就完成了。后来我知道这个效果叫ImageCropper,找了些这类效果参考,完善了切割的部分。近来我把其中的拖放效果和缩放效果单独出来研究,经过整理和完善,再套进切割效果,个人感觉效果已经不错了。要说明的是这个只是一个效果,并不是真正的切割图片,要获取真正的切割图片请参考图片切割系统。程序说明
这个效果主要分三个部分:层的拖放、层的缩放、图片切割(包括预览)。其中层的拖放和层的缩放我已经在其他两篇文章中有详细说明,这里就说说图片切割这部分吧。
【图片切割】
关于图片切割的设计,有三个方法:1.定位四个半透明层,遮住要盖住的部分,没试过,感觉比较麻烦;2.把图片设为背景图,通过设置背景图的位置来实现,但这样的缺点是只能按图片的正常比例实现,不够灵活;3.把图片放到切割对象里面,通过设置图片的top和left实现,这个方法是可行,但下面有更简单的方法实现;4.通过设置图片的clip来实现。
这里介绍方法4的实现方法,这个方法是从当年“珍藏”的代码中看到的,先说说clip:clip的作用是“检索或设置对象的可视区域。可视区域外的部分是透明的。”依据上-右-下-左的顺序提供自对象左上角为(0,0)坐标计算的四个偏移数值来剪切。例如:
div { position:absolute; width:60px; height:60px; clip:rect(0 20 50 10); }
注意position:absolute的设置是必须的(详细看手册)。
下面说说具体实现原理:首先需要一个容器(_Container),容器里面会插入三个层:底图层(_layBase):那个半透明的图片;切割层(_layCropper):正常显示的那个部分;控制层(_layHandle):就是控制显示的那个部分。
其中为了底图层和切割层是程序自动创建的图片,控制层是自己定义的层(程序中是一个div)。底图层和切割层必须完全重合,程序中把这两个层都绝对定位到了左上角:
this._layBase.style.top = this._layBase.style.left = this._layCropper.style.top = this._layCropper.style.left = 0;复制代码
层叠顺序也要设置一下保证各层顺序。
下面说说各部分的作用:容器:除了容器本身的作用,通过设置其背景色来设置透明的渐变色,由于图片本身没有背景色所以要通过容器来设置;底图层:在容器最底部,作用是显示非选择区域的图片,透明效果就是在这层设置;切割层:最关键的一个层,在底图层和控制层之间,在这个层通过clip设置其可视区域来实现切割图片的效果;控制层:位于顶部,拖放(_drag)和缩放(_resize)效果就是在这个层实现,根据其拖放和缩放的结果控制切割层的切割效果。
这里要注意的是控制层的_drag拖放效果的Transparent要设为true(详细看拖放效果的透明背景bug部分)。要使用缩放需要把Resize设为true,并设置各个拖拉对象,程序通过_resize设置缩放的比例和最少范围(详细看拖拉缩放效果)。
下面说说控制层如何控制切割效果:控制层的拖放和缩放过程中加入了SetPos设置切割样式程序,在SetPos程序中根据控制层的样式设置切割层的可视区域范围:
var p = this.GetPos();this._layCropper.style.clip = rect( + p.Top + px + (p.Left + p.Width) + px + (p.Top + p.Height) + px + p.Left + px);复制代码
其中GetPos程序,它可以把当前控制层的样式参数作为一个对象返回:
with(this._layHandle){ return { Top: offsetTop, Left: offsetLeft, Width: offsetWi
文档评论(0)