以前作过这样一个需求,要让商家页的商家图片按照图片外面box的大小等比例缩放。以前的想法是在页面中先输出图片的src,而后在页面底部初始化js,而后在js中写相应的可使图片按照box的大小等比例缩放的函数。要实现图片的等比例缩放要作到如下几点,
第一,获得图片的width和height
第二,比较图片的width和height与box的width的height的大小,共有四种状况,
# 若是图片的width和height均小于box的width和height,那么直接让图片上下左右居中便可,
# 若是图片的width大于box的width,height小于box的height,让图片按照宽度等比例缩放,而后垂直居中,
# 若是图片的height大于box的height,width小于box的width,让图片按照高度等比例缩放,而后左右居中,
# 若是图片的width和height均大于box的width和height,那么分别计算图片的widht和height和box的width和height的比,用较小的值做为缩放的比例,而后上下左右居中便可。
第三,将获得的图片放入对应的img节点中便可
javascript
<input type="button" name="" value="载入图片" onclick="addImg('tt.jpg')" /> <script type="text/javascript"> function addImg(isrc) { var Img = new Image(); Img.src = isrc; Img.onload = function () { document.body.appendChild(Img); } } </script>
当页面打开后,点击按钮后,会显示tt.jpg,可是若是重复点击会怎样呢?在IE中,除了第一次加载 图片时候显示正常,以后再点击就没有反应了,刷新也同样。FF中,每点击一次加载一张该图片。而这是什么缘由呢?是由于在IE中只执行了一次onload或者是缓存的问题吗?先改写一下代码,html
<input type="button" name="" value="载入图片" onclick="addImg('tt.jpg')" /> <script type="text/javascript"> function addImg(isrc) { var Img = new Image(); Img.onload = function () { document.body.appendChild(Img); } Img.src = isrc; } </script>
如今再点击图片,就正常了,今后可见不是由于IE没有触发onload事件,而是由于IE中加载缓冲区的速度太快,以致于没有运行到img.onload 的时候,图片已经被加载完毕了。所以,能够先告诉浏览器如何处理这张图片,而后再制定这张图片的来源。通常状况下,能够用complete来判断图片是否 加载完毕。对于 complete 属性来说,IE是根据图片是否显示过来判断,就是说当加载的图片显示出来后,complete 属性的值才为true ,不然一直是false ,和之前是否加载过该张图片没有关系,即和缓存没有关系!能够写以下的函数来作到各个浏览器中预加载图片的兼容性。java
var imgLoad = function (url) { var img = new Image(); img.src = url; if (img.complete) { callback(img.width, img.height); } else { img.onload = function () { callback(img.width, img.height); img.onload = null; }; }; };
文章来自:http://blog.sina.com.cn/s/blog_73c8ed1901013k70.html浏览器