移动站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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm 激活码Key is invalid(JetBrains全家桶)

    (pycharm 激活码Key is invalid)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL5S9V8F-eyJsaWNlbnNlSWQiOi…

    2022年3月27日
    1.1K
  • 彻底理解接口幂等性

    彻底理解接口幂等性目录背景 1 幂等性的概念 2 什么情况需要处理接口幂等性问题 2 1select 天然自带幂等性 2 2insert 当我们重复插入数据的时候 会出现什么情况 2 3delete 是否具有幂等性 2 4update 猜一猜是否具有天热幂等性 3 接口幂等性解决方案 3 1 唯一索引 防止新增脏数据 3 2token redis 机制 3 3CAS 保证接口幂等性 3 4 悲观锁 3 5 乐观锁实现幂等 3 6 分布式锁 3 7 防重表 3 8 缓

    2025年8月22日
    2
  • java静态全局变量和全局变量的区别_java静态全局变量

    java静态全局变量和全局变量的区别_java静态全局变量Java的面向对象的代码结构会使在多个位置引用变量更加困难。有时也很难确定给定变量应属于哪个类,尤其是当它是一个广泛使用的值(例如数据库连接器或数学常数)时。Java全局变量怎么定义?在许多语言中,当遇到这样的问题时,我们可以声明一个全局变量。但是,不幸的是,Java从技术上不允许在全局范围内创建变量。在本文中,我们将介绍如何在Java中模拟和使用全局变量。什么是全局变量?全局变量是可以从任何范围访问的变量。许多编程语言都具有用于声明全局变量的特殊语法,例如,Python使我们可以使

    2022年8月21日
    6
  • 一张图解释TDD和FDD的区别

    一张图解释TDD和FDD的区别转载自:http://iphonebbs.cnmo.com/thread-14714263-1-1.html如图和明显TDD是这一秒上行,下一秒下行FDD是两个通道再详细点就是TDD就是这一个时段进,下一个时段出,所以叫做时分双工,速度越快,衰落变换频率越高,衰落深度越深,因此必须要求移动速度不能太高。而FDD是双向通道,是两个频段,所以叫做频分双工,FDD模

    2022年6月12日
    45
  • vscode前端插件简单配置

    vscode前端插件简单配置AutoCloseTaghtml标签自动闭合Chinese(Simplified)(简体中文)LanguagePackforVisualStudioCodevscode中文插件儿EasyLESS项目无框架无webpack时可以使用的一个less转换插件settings.json配置”less.compile”:{ “out”:false,//是否输出css文件,false为不输出 “compress”:false,//是否压缩 “sour..

    2022年7月25日
    6
  • python3安装win32api

    python3安装win32apipython3安装win32api

    2022年10月11日
    3

发表回复

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

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