移动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 相关文章推荐
Javascript 入门基础学习
Mar 10 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 Javascript
探讨js中的双感叹号判断
Nov 11 Javascript
纯JS实现根据CSS的class选择DOM
Mar 22 Javascript
JavaScript中获取Radio被选中的值
Nov 11 Javascript
JS数组合并push与concat区别分析
Dec 17 Javascript
JavaScript编码风格指南(中文版)
Aug 26 Javascript
js实现鼠标拖动功能
Mar 20 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
JavaScript选择器函数querySelector和querySelectorAll
Nov 27 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快速统计某个数据库中每张表的数据量
2012/09/04 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
给Function做的OOP扩展
2009/05/07 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
Vue异步加载about组件
2017/10/31 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python实现音乐下载器
2018/04/15 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
什么是makefile? 如何编写makefile?
2013/01/02 面试题
作文批改评语大全
2014/04/23 职场文书
项目建议书怎么写
2014/05/15 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
华山导游词
2015/02/03 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
二婚主持词
2015/06/30 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
SQLServer常见数学函数梳理总结
2022/08/05 MySQL