• window.onresize监听事件


         最近忙于第二版网站功能bug制作修改,交互逻辑完成,但是准备换一下布局和整体色调,算是一次小改,趁机会把一直没有实现的功能抽时间解决了下——自适应屏幕高度。

        页面的整体布局如图基本分为3个div:(网站具体页面截图不透露了,以3个div演示)

                                                                                     

          最上方的蓝色部分为导航栏,中间带图像的浅色区域为交互显示区域,,底部蓝色区域为缩略图区域。

          因为是做人工智能医疗的网站,交互的东西会多一些,图中的片子是b超甲状腺的影像,可以进行画笔、圈取病变、ct影像还有调节影像窗宽窗位的功能、等等。底部的缩略图会显示当前病例的文件(1~n张图像)的缩略图。

    最开始只想到了屏幕宽度的自适应,因为根据屏幕不同的宽度,绘制不同数量的缩略图。但在实际测试中发现在不同屏幕上,画布canvas的长度和宽度是固定的,也就造成大屏幕上正好一屏显示了,小屏幕笔记本,一屏显示不下。

    就造成,无限的滚动查看屏幕(切换缩略图,canvas交互,导航栏工具使用,三部分的切换),体验感很差。

         最近有时间修正了一下这个bug,无论在任何分辨率的屏幕上都正好盛满一整屏幕

         最初的想法就是直接设置div百分比不就行了?这种办法可行,但不适用我的网站,很简单的实现方法有局限性

         

    <html>
    <head>
    <style type="text/css">
    html,body{height:100%; width:100%; overflow:hidden; margin:0;
    padding:0;}
    .main{width:100%; height:100%; overflow:hidden; margin:0;padding:0;}
    .div1{width:100%; height:80px; color:#fff;background-color:#369; text-align:center;}
    .div2{width:100%; height:100%;color:#fff;background-color:#FF0000;text-align:center;"}
    </style>
    </head>
    <body>
    <div class="div1">
    div1
    </div> <div class="main"> <div class="div2">
    div2
    </div> </div> </body> </html>

         可以复制代码去看一下,就不截屏了,这个方法只限于小部分:div.main是撑满屏幕100%的,也不是完全充满,在先绘制div1后,剩下屏幕的位置会全部充满,也就是说,如果mian后边还有div,那就直接下一屏幕了,当前屏幕已经被div1:100px;和剩下的main100%沾满了。按照这样实现底下的缩略图没有了 ,如果给main设置个80%或者90%,也不能无缝的实现。

       最后还是要js动态实现,实现第一版:div根据屏幕初始高度自适应,基本功能实现,但是高度的设置只限于documen.ready,完成后,调整浏览器的尺寸,div固定大小了,并没有动态调整。有没有一种监听浏览器窗口变化的事件呢?后来上网查询,查到了windows.onresize这个api,经过调整最终实现了功能。

      

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
        <style>
        </style>
    </head>
    <body>
      <div style="100%;height:100px;background-color:blue;">
        @01
      </div>
      <div id="main" style="background-color: lightblue; 100%;height:100px;">
    <div id="show_div" style="background-color: lightblue; 100%;height: 100%;text-align:center;">
      <canvas id ="canvas"  style="720px; height: 100%;z-index:2;"></canvas>
    </div>
    </div>
    <div style="100%;height:100px;background-color:blue;">
      @03
    </div>
    
    </body>
    </html>

         js代码:

    <script>
    var cv=document.getElementById("canvas");
    var context=cv.getContext("2d");
    
    $(document).ready(function() {
     
      var clientheight=document.documentElement.clientHeight;
      console.log(clientheight);
      console.log("
     %c Feng V1.0 %c 
    
    ","color: #fadfa3; background: #4f98fd; padding:5px 0;","background: #fadfa3; padding:5px 0;");
      $("#main").get(0).style.height=clientheight-200+"px";
      $("#canvas").get(0).style.width=(clientheight-200)*1.25+"px";
      console.log($("#main").get(0).style.height);
    
    
     var imgLoad=new Image();
      imgLoad.src = "001.jpg";
        imgLoad.onload = function (){
          context.clearRect (0 , 0 , canvas.width , canvas.height ) ;
          context.drawImage (imgLoad,0,0,canvas.width,canvas.height) ;
          console.log("imgLoad."+imgLoad.width);
          console.log("imgLoad.height:"+imgLoad.height);
        }
    });
        window.onresize = change;
        function change(){
          var clientheight=document.documentElement.clientHeight;
          console.log(clientheight);
          $("#main").get(0).style.height=clientheight-200+"px";
    //图像尺寸为5:4,这里给width也做一个动态调整。 $(
    "#canvas").get(0).style.width=(clientheight-200)*1.25+"px"; console.log($("#main").get(0).style.height); } </script>

    有两点注意:每一次d都要重新为clientheight赋值, 网上说在谷歌浏览器里,windows.onresize会执行两次,我没有遇到,如果遇到这个情况,设置一个判断即可

  • 相关阅读:
    kubernetes容器编排系统介绍
    whistle--全新的跨平台web调试工具
    深刻理解 React (一) ——JSX和虚拟DOM
    理想的互联网服务后台框架的九个要点
    gerrit的使用笔记
    Ubuntu 使用unzip解压乱码的问题
    ibus-libpinyin 无法选择除第一个外的候选词
    vscode Git:failed to execute git
    C Primer Plus 创建友好的输入界面 笔记
    Git学习笔记---安装与初始化 连接远程版本库
  • 原文地址:https://www.cnblogs.com/fengchaoran/p/7928992.html
Copyright © 2020-2023  润新知