移动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据option的value值快速设定初始的selected选项
Aug 13 Javascript
javascript中的缓动效果实现程序
Dec 29 Javascript
jquery()函数的三种语法介绍
Oct 09 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
再谈Jquery Ajax方法传递到action(补充)
May 12 Javascript
transport.js和jquery冲突问题的解决方法
Feb 10 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
bootstrap-paginator服务器端分页使用方法详解
Feb 13 Javascript
ant-design-vue按需加载的坑的解决
May 14 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数据缓存技术
2007/02/14 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
python flask中静态文件的管理方法
2018/03/20 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
比利时香水网上商店:NOTINO
2018/03/28 全球购物
留学自荐信的技巧
2013/10/17 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
自荐信的格式
2014/03/10 职场文书
党员自我对照检查材料
2014/08/19 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
2016元旦主持人经典开场白台词
2015/12/03 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript