移动站Web开发图片自适应两种常见情况解决方案

移动站Web开发图片自适应两种常见情况解决方案

  本文主要说的是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代码中添加相应的处理语句即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119303.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL详细学习教程(建议收藏)

    MySQL详细学习教程(建议收藏)目录1、初识数据库1.1、什么是数据库1.2、数据库分类1.3、相关概念1.4、MySQL及其安装1.5、基本命令2、操作数据库2.1、操作数据库2.2、数据库的列类型2.3、数据库的字段属性2.4、创建数据库表2.5、数据库存储引擎2.6、修改数据库3、MySQL数据管理3.1、外键3.2、DML语言1.添加insert2.修改update3.删除delete4、DQL查询数据4.1、基础查询4.2、条件查询4.3、分组查询4.4、连接查询4.5、排序和分页4.6、子查询4.7、MySQL函

    2022年10月3日
    2
  • 算法分析与设计论文

    算法分析与设计论文1:递归算法程序直接或间接调用自身的编程技巧称为递归算法(Recursion)。递归算法是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。它通常把一个大型复杂的问题转化为一个与原问题

    2022年8月2日
    6
  • hadoop调优方法(和也篇)

    前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系正文RM的内存资源配置,配置的是资源调度相关ID配置说明RM1yarn.scheduler.minimum-allocation-mb分配给AM单个容器可申请的最小内存RM2yarn.scheduler.maximum-allocation-mb分配给AM单个容器可申请

    2022年4月12日
    33
  • python 字典最外层使用_python字典底层实现

    python 字典最外层使用_python字典底层实现前言问题1:python中的字典到底是有序还是无序问题2:python中字典的效率如何python字典底层原理在Python3.5以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插

    2022年7月31日
    6
  • (转)算法帝国:华尔街交易怪兽的核武器缔造史

    (转)算法帝国:华尔街交易怪兽的核武器缔造史算法帝国:华尔街交易怪兽的核武器缔造史华尔街见闻2017-02-01访问量5701980年华尔街的黑客生涯:天时地利http://wallstreetcn.com/node/28758320世纪70年代末期,算法开始进入人们的工作,这一趋势席卷了世界各地的金融市场,标志着华尔街黑客时代已然来临。华尔街逐渐吸引了美国越来越多杰出的数学家和科学家投身于编写交易算法的工作。在布莱克?

    2022年7月11日
    20
  • 黑苹果安装详细过程

    黑苹果安装详细过程前言:此教程谨献给出入黑苹果的小白们学习经验,如安装过程出现任何意外将于本人无关。鉴于网上有很多大佬写的教程,但以我的角度来看(才识浅薄),有些细节并没有提到,会让小白比较懵,所以才有了写这篇教程的想法。第一次写教程,请多指教,有写错的地方还请各路大神指正,老鸟看看就好,勿喷(感谢)(未经允许,禁止转载,请尊重)废话就不说了,直接进入正题。UEFI+GPT是前提,如果是传统引导方式的,请自行…

    2022年6月11日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号