移动站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代码中添加相应的处理语句即可。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • internal server error是什么意思?

    internal server error是什么意思?internalservererror错误通常发生在用户访问网页的时候发生,该错误的意思是因特网服务错误。能够引起internalservererror报错的原因有多个,如果你是网站主的话,可以对下列情形进行一一排查。  1.服务器资源超载。如果网站文件没有做过修改,最有可能的是同服务器的资源超载:即同一时间内处理器有太多的进程需要处理的时候,会出现500错误。借助SSH,可以在命令行中输入以下命令查看:psfauxpsfaux|grepusername如果你查到某个进程消耗过多资源,

  • ASP .NET DropDownList多级联动事件

    ASP .NET DropDownList多级联动事件思路假如有三级省、市、区,先加载出所有省选择省之后,加载出该省所有市选择市之后,加载出该市所有区重新选择省,则清空市和区重新选择市,则清空区想好数据结构,不同的数据结构做法不同例子数据结构publicclassArea{publicintPKID{get;set;}publicintParentID{get;set;}…

  • QT之计算器核心解析算法(十)

    QT之计算器核心解析算法(十)

  • 老电脑 升级 cpu性能排行 高性价比的cpu主板选择

    老电脑 升级 cpu性能排行 高性价比的cpu主板选择老电脑升级cpu性能排行高性价比的cpu主板选择4核ddr2ddr3

  • 如何高效学习PLC

    如何高效学习PLC【1】电工原理和电机原理一定要懂,简单的就记背也要背下来,比如马达容量1KW2A,正反转,星三角接线,电线容量。电阻,电感,电容的特性等;【2】液压和气动也要掌握,比如压力换算,压力和电流的比例换算,这在有压力控制上都要用到;【3】电线截面要会看,线拿到手就知道几平方的,还有什么电器上该用什么线,比如马达就用4线的,3根主线1根接地。从变频器上出来的要用屏蔽线;【4】机修也要会做,特别是螺丝…

    2022年10月19日
  • 搭建环境是什么意思_如何搭建安卓开发环境

    搭建环境是什么意思_如何搭建安卓开发环境WebIDE下载网址:https://tools.hana.ondemand.com/#sapui5下载好之后打开进入WEBIDE\eclipse\config_master\service.destinations\destinations,在destinations文件下面拷入SAPGUI的客户端配置(txt文档),URL填入GUI上配置的服务器地址就行,端口就配8080(有冲突的话在后台关掉),格式如下之后返回\WEBIDE\eclipse打开orion运行运…

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

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