移动Web中图片自适应的两种JavaScript解决方法


Posted in Javascript onJune 18, 2015

本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案。开始吧
在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集,这种文章只需要左右滑动浏览,最好的体验是让图片缩放显示在屏幕有效范围内,防止图片太大导致用户需要滑动手指移动图片来查看这种费力气的事情,用户体验大大降低。二是图文混排的文章,图片最大宽度不超过屏幕宽度,高度可以auto。这两种情况在项目中很常见。另外,有人说做个图片切割工具,把图片尺寸比例都设定为统一的大小,但即使这样,面对各种大小的移动设备屏幕,也是无法适用一个统一方案就能解决得了的。而且如果需求太多,那服务器上得存多少份不同尺寸的图片呢?显示不太符合实际。

下面是图集类型,需求方要求图片高宽都保持在手机可视视野范围,js代码列在下面:

<script type="text/javascript"> 
$(function(){ 
 
var imglist =document.getElementsByTagName("img"); 
//安卓4.0+等高版本不支持window.screen.width,安卓2.3.3系统支持 
/* 
var _width = window.screen.width; 
var _height = window.screen.height - 20; 
 
var _width = document.body.clientWidth; 
var _height = document.body.clientHeight - 20; 
*/ 
var _width,  
  _height; 
doDraw(); 
 
window.onresize = function(){ 
  doDraw(); 
} 
 
function doDraw(){ 
  _width = window.innerWidth; 
  _height = window.innerHeight - 20; 
  for( var i = 0, len = imglist.length; i < len; i++){ 
    DrawImage(imglist[i],_width,_height); 
  } 
} 
 
function DrawImage(ImgD,_width,_height){  
  var image=new Image();  
  image.src=ImgD.src;  
  image.onload = function(){ 
    if(image.width>30 && image.height>30){  
    
      if(image.width/image.height>= _width/_height){  
        if(image.width>_width){ 
          ImgD.width=_width;  
          ImgD.height=(image.height*_width)/image.width;  
        }else{  
          ImgD.width=image.width;  
          ImgD.height=image.height;  
        }  
      }else{  
        if(image.height>_height){ 
          ImgD.height=_height;  
          ImgD.width=(image.width*_height)/image.height;  
        }else{  
          ImgD.width=image.width;  
          ImgD.height=image.height;  
        }  
      } 
    }   
  } 
 
} 
   
}) 
</script>

注意:测试中发现安卓4.0+的系统对window.screen.width属性支持的不好,很多情况在首次加载时返回的屏幕像素不正确。本人的安卓2.3.3系统测试通过,支持该属性。据说,这是安卓系统的bug,可以通过setTimeout设置延时时间来解决这个问题。不过,这个方法,本人怎么测试都行不通。所以干脆还是另寻高明吧。发现window.innerWidth可以担此重任,没有发现兼容问题,ok。

下面是,第二种情况,图文并茂的文章类型。这时候只对图片宽度和手机宽度适应有要求,对高度不做限制,相对容易些。
改造上面的javascript代码,如下:

<script type="text/javascript"> 
$(function(){ 
var imglist =document.getElementsByTagName("img"); 
//安卓4.0+等高版本不支持window.screen.width,安卓2.3.3系统支持 
var _width; 
doDraw(); 
 
window.onresize = function(){ 
  //捕捉屏幕窗口变化,始终保证图片根据屏幕宽度合理显示 
  doDraw(); 
} 
 
function doDraw(){ 
  _width = window.innerWidth; 
  for( var i = 0, len = imglist.length; i < len; i++){ 
    DrawImage(imglist[i],_width); 
  } 
} 
 
function DrawImage(ImgD,_width){  
  var image=new Image();  
  image.src=ImgD.src;  
  image.onload = function(){ 
    //限制,只对宽高都大于30的图片做显示处理 
    if(image.width>30 && image.height>30){  
      if(image.width>_width){ 
        ImgD.width=_width;  
        ImgD.height=(image.height*_width)/image.width;  
      }else{  
        ImgD.width=image.width;  
        ImgD.height=image.height;  
      }  
 
    }   
  } 
 
} 
   
}) 
</script>

说明:代码中的resize函数,是捕捉屏幕窗口变化,始终保证图片根据屏幕宽度合理显示。当然了,前提是像我的项目一样,文章直接为富文本格式,图片的父级标签已经设定了text-align:center的居中属性。如果你的文章内容是直接调用第三方的,那么你可以在上面的javascript代码中添加相应的处理语句即可。

Javascript 相关文章推荐
js 颜色选择器(兼容firefox)
Mar 05 Javascript
使用firebug进行调试javascript的示例
Dec 16 Javascript
JavaScript数组随机排列实现随机洗牌功能
Mar 19 Javascript
JS实现页面进入和返回定位到具体位置
Dec 08 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
js删除数组中的元素delete和splice的区别详解
Feb 03 Javascript
原生js实现获取form表单数据代码实例
Mar 27 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
JS实现json数组排序操作实例分析
Oct 28 Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
Nov 09 Javascript
javascript随机显示背景图片的方法
Jun 18 #Javascript
利用JavaScript的AngularJS库制作电子名片的方法
Jun 18 #Javascript
javascript实现根据时间段显示问候语的方法
Jun 18 #Javascript
javascript显示中文日期的方法
Jun 18 #Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
Jun 18 #Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
Jun 18 #Javascript
初步认识JavaScript函数库jQuery
Jun 18 #Javascript
You might like
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP反射学习入门示例
2019/06/14 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
详解JS面向对象编程
2016/01/24 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
原生js实现放大镜
2017/02/20 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
vue 限制input只能输入正数的操作
2020/08/05 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
寻找网站后台地址的python脚本
2014/09/01 Python
python访问抓取网页常用命令总结
2017/04/11 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
手术室护士长竞聘书
2014/03/31 职场文书
预防煤气中毒方案
2014/06/16 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
Java中的随机数Random
2022/03/17 Java/Android