移动站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)


相关推荐

  • vim替换区分大小写_word英文大小写切换

    vim替换区分大小写_word英文大小写切换利用vim的正则表达式模块下面的代码是,全文变成小写,:%s/.*/\L&/g\L是小写;\U是大写;&&是正则表达式全部匹配项,其他的还有:\1,\2,\3,…,\9。表示第1,2,3…9个匹配项。比如说想替换“abcxxxxabcxxxxxabc”为“ABCxxxxABCxxxxxABC”输入如下命令:%s/abc/\U&/g比如像替换“{ABC}xxxx{

  • 利用Python通过频谱分析和KNN完成iphone拨号的语音识别

    利用Python通过频谱分析和KNN完成iphone拨号的语音识别

    2021年11月22日
  • sklearn.metrics.auc_auc值计算公式

    sklearn.metrics.auc_auc值计算公式fromsklearnimportcross_validation,metricsfromsklearnimportsvmtrain_data,train_target=load(filename)#自定义加载数据函数,返回的是训练数据的数据项和标签项train_x,test_x,train_y,test_y=cross_validation.train_test_split

  • URLEncoder转码问题

    URLEncoder转码问题2019独角兽企业重金招聘Python工程师标准>>>…

  • python实现——ASCII谢尔宾斯基地毯

    python实现——ASCII谢尔宾斯基地毯目录一、题目内容:二、思路:三、python代码:4、总结一、题目内容:二、思路:看到这个图案,肯定是自相似的,所以肯定用递归解决这个问题。但是具体怎样的呢?(1)这个其实就是二维矩阵,所以是要判断每个位置是不是要填给定字符,如果确定了每个位置填或不填,那不就解决问题了嘛;(2)用两个for循环不就遍历了所有的位置了么,所以这个也简单,现在的难点在于如何知道每个位置要填,所以用一个函数判断;(3)这个判断的函数需要三个参数,一个是边长数,另外两个是坐标。边界条件是n=1就返回T.

  • asp.net dropdownlist绑定省份_droplist

    asp.net dropdownlist绑定省份_droplistASP.NETDropDownList绑定

发表回复

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

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