【web前端】面题整理(2)

【web前端】面题整理(2),第1张

概述今天是520,单身狗在这里祝各位520快乐! DOM节点统计 DOM 的体积过大会影响页面性能,假如你想在用户关闭页面时统计(计算并反馈给服务器)当前页面中元素节点的数量总和、元素节点的最大嵌套深度以及最大子元素个数,请用 JS 配合原生 DOM API 实现该需求(不用考虑陈旧浏览器以及在现代浏览器中的兼容性,可以使用任意浏览器的最新特性;不用考虑 shadow DOM)。比如在如下页面中运行后

今天是520,单身狗在这里祝各位520快乐!

DOM节点统计

DOM 的体积过大会影响页面性能,假如你想在用户关闭页面时统计(计算并反馈给服务器)当前页面中元素节点的数量总和、元素节点的最大嵌套深度以及最大子元素个数,请用 Js 配合原生 DOM API 实现该需求(不用考虑陈旧浏览器以及在现代浏览器中的兼容性,可以使用任意浏览器的最新特性;不用考虑 shadow DOM)。比如在如下页面中运行后

<HTML>  <head></head>  <body>    <div>      <span>f</span>      <span>o</span>      <span>o</span>    </div>  </body></HTML>

会得出这样一个对象:

{  totalElementsCount: 7,maxDOMTreeDepth: 4,maxChildrenCount: 3}
我的答案
const obj={}class Ele{    constructor(ele){        this.ele=ele;        this.funum=1;    }    //取当前节点的元素深度    getEleDepth(){        let fuele=this.ele.parentNode;        if(fuele!==document){            this.funum++;            this.ele=fuele;            return this.getEleDepth();        }else{            return this.funum;        }    }    //去当前节点的子元素个数    getEleSubNum(){        let zIEles=this.ele.childNodes,zinum=0;        for(let i=0;i<zIEles.length;i++){            if(zIEles[i].nodename!==‘#text‘){                zinum++;            }        }        return zinum;    }}const totalElements=document.getElementsByTagname("*")obj.totalElementsCount=totalElements.length;//dom中的所有节点数量let eleDepthArr=[];let eleSubarr=[];for(let i=0;i<totalElements.length;i++){    eleDepthArr.push(new Ele(totalElements[i]).getEleDepth())    eleSubarr.push(new Ele(totalElements[i]).getEleSubNum())}eleDepthArr=eleDepthArr.sort((a,b)=>(b-a))eleSubarr=eleSubarr.sort((a,b)=>(b-a))obj.maxDOMTreeDepth=eleDepthArr[0]//元素节点的最大嵌套深度obj.maxChildrenCount=eleSubarr[0]//最大子元素个数console.log(obj)

 

按图完成布局和拖动效果

在已提供的HTML片段的基础上继续编写 CSS 和 Js,已完成如下效果图所演示的效果,且要求左侧left部分最小宽度100px,最大宽度300px。提示:可以使用 mousedown,mouseup,mousemove 几个事件来组合处理拖动效果,也欢迎使用其他方案。
已知HTML片段:

效果图:

给点HTML:

<HTML>  <head>    <Title>按图完成布局和拖动效果</Title>  </head>  <body>    <div class="container">     <div class="left">left<div class="drag"></div></div>      <div class="right">right</div>    </div>  </body></HTML>

给定部分CSS:

.container {  wIDth: 100%;  height: 500px;  min-wIDth: 500px;  overflow: scroll;}.left,.right {  border: 1px solID #ccc;  Font-size: 22px;  color: #333;  Font-weight: bold;  text-align: center;  line-height: 500px;}.right {  border-left: 0 none;}
我的改动:

有些未完成。。。暂时想到是这个思路

.container {    wIDth: 100%;    height: 500px;    min-wIDth: 500px;    overflow: scroll;    /*--*/    display: flex;    justify-content: flex-start;}.left,.right {    border: 1px solID #ccc;    Font-size: 22px;    color: #333;    Font-weight: bold;    text-align: center;    line-height: 500px;}.right {    border-left: 0 none;    wIDth: 100%;}/*--*/.left{    max-wIDth: 300px;    min-wIDth: 100px;    position: relative;}.drag{    height: 100%;    wIDth: 10px;    float: right;    margin-right: -5px;}
<div class="container">    <div ID="left" class="left">        left        <div ID="drag" class="drag"></div>    </div>    <div class="right">right</div></div>
const drag=document.getElementByID("drag");const left=document.getElementByID("left");drag.onmousedown=function(e){    // console.log(e.clIEntX)    let mx=e.clIEntX    this.onmousemove=function(){        let cw=left.clIEntWIDth;        console.log(e.clIEntX)    }    this.onmouseup=function(){        console.log(3)        this.onmousemove=null;        this.onmouseup=null;    }}
总结

以上是内存溢出为你收集整理的【web前端】面题整理(2)全部内容,希望文章能够帮你解决【web前端】面题整理(2)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1088476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存