移动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吗?
Feb 24 Javascript
Mootools 1.2教程 事件处理
Sep 15 Javascript
jQuery列表拖动排列具体实现
Nov 04 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
javascript针对不确定函数的执行方法
Dec 16 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
vue axios 二次封装的示例代码
Dec 08 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
Sep 14 Javascript
Vue项目自动转换 px 为 rem的实现方法
Oct 29 Javascript
小程序分享模块超级详解(推荐)
Apr 10 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
Nov 18 jQuery
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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
python如何进入交互模式
2020/07/06 Python
python的dict判断key是否存在的方法
2020/12/09 Python
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
爱心活动计划书
2014/04/26 职场文书
干部考核评语
2014/04/29 职场文书
文化建设工作方案
2014/05/12 职场文书
美术教师个人工作总结
2015/02/06 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
运动会通讯稿50字
2015/07/20 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
使用Ajax实现无刷新上传文件
2022/04/12 Javascript