面试题小结

一、什么是虚拟dom

描述真实dom的js对象。

二、DOM操作——怎样添加、移除、移动、复制、创建和查找节点

(1)创建新节点

  createDocumentFragment()    //创建一个DOM片段

  createElement()   //创建一个具体的元素

  createTextNode()   //创建一个文本节点

(2)添加、移除、替换、插入

  appendChild()

  removeChild()

  replaceChild()

  insertBefore() //在已有的子节点前插入一个新的子节点

(3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)

getElementById() //通过元素Id,唯一性

三、dom曝光

(1)IntersectionObserver。

(2)window.scroll 监听滚动 + 使用 getBoundingClientRect() 相对于视口位置。 

客户端可视区域:宽高不包括边框

相对距离: 宽高包括边框

滚动距离: 

  

四、判断元素是否在可视区域的三种方法

(1) getBoundingClientRect

const getBoundingClientRectJudge = () => {let domRect = card.getBoundingClientRect();console.log(domRect)let ch = document.documentElement.clientHeight;let cw = document.documentElement.clientWidth;let isInsert = true;if (domRect.bottom < 0 || domRect.top > ch || domRect.right < 0 || domRect.left > cw) {isInsert = false;}let background = nullif (isInsert) {background = "green"} else {background = "red"}circle.style.background = background}window.addEventListener("scroll", _.throttle(getBoundingClientRectJudge, 500))getBoundingClientRectJudge()

(2)IntersectionObserver

const card = document.querySelector(".card");const circle = document.querySelector(".circle");const observer = new IntersectionObserver((changes) => {// changes是数组changes.forEach(one => {console.log(one)let isIntersecting = one.isIntersectinglet background = nullif (isIntersecting) {background = "green"} else {background = "red"}circle.style.background = background})})observer.observe(card)

(3)offsetTop、scrollTop

function isInViePortOfOne(el){const viewPortHeight = window.innerHeight || document.documentElement.clientHeight||document.body.clientHeightconst offsetTop = el.offsetTop;const scollTop = document.documentElement.scrollTopconst top = offsetTop - scollTop;return top <= viewPortHeight && top >= 0
}

 五、路由实现原理

(1)hash:

hashChange

(2)history

pushState、popState方法

六、typeof输出

(1)typeof null => 'object'

(2)typeof undefined => 'undefined' 

七、flex的三个简写属性是什么

(1)flex-grow:根据排列方向宽度或高度不够时,加上加权空白来调整子元素宽。

(2)flex-shrink:根据排列方向宽度或高度不够时,减去加权超出部分来调整子元素宽。

(3)flex-basis:指定调整前的子元素宽度,与width属性的作用完全相同

八、手写join,传入join(["1",undefined,null,false]"_")要输出"1---false"

    function convert(value) {if (value === undefined || value === null) {return '';}return value;}function join(arr, separator) {if (!separator) separator = ',';return arr.reduce((result, value, index) => {result += convert(value);if (index < arr.length - 1) result += separator;return result;}, '');}

(1)null、undefined调用toString会报错

 

九、给定了标签,用flex布局画一个五简出来

  • display 为 flex:弹性盒子
  • justify-content:水平对齐方式
    • flex-start:主轴靠左对齐(默认值)
    • flex-end:主轴靠右对齐
    • center:主轴水平居中对齐
    • space-around:两端对齐,两端间距是中间距离的一半
    • space-between:两端靠边对齐,中间等距
    • space-evenly:两端对齐,两端间距与中间距离等距
  • align-items 为 center :侧轴垂直居中对齐
  • flex-wrap 为 wrap, wrap 是换行,默认 nowrap 不换行
  • flex-direction 为 column:主轴和侧轴换位置,名字不变
  • align-self 为 center:自身侧轴垂直居中对齐(设置给弹性盒子的子元素)
<template><ul class="ul5"><li></li><li></li><li></li><li></li><li></li></ul>
</template>
<style>
/* ◆公共样式 */
* {margin: 0;padding: 0;box-sizing: border-box;
}ul {float: left;margin: 10px 0 0 10px;width: 80px;height: 100px;background-color: #ccc;border-radius: 5px;
}li {list-style: none;width: 20px;height: 20px;border-radius: 50%;background-color: red;
}
.ul5 {display: flex;flex-wrap: wrap;justify-content: space-around;align-items: center;
}
.ul5 li:nth-child(3) {margin: 0 30px;
}
</style>

参考:

我用 flex 布局 写了 9 个麻将 

十、手写一个数组反转不使用rerevert函数

function reverse(arr) {const newArr = [];// eslint-disable-next-line no-restricted-syntaxfor (let i = arr.length - 1; i >= 0; i--) newArr.push(arr[i]);return newArr;}

 十一、溢出展示...的css单行文本代码

.ellipsis {white-space: nowrap; /* 确保文本在一行内显示 */overflow: hidden; /* 隐藏溢出的内容 */text-overflow: ellipsis; /* 使用省略号表示文本溢出 */
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/282661.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全栈的自我修养 ———— uniapp中加密方法

直接按部就班一步一步来 一、首先创建一个js文件填入AES二、创建加密解密方法三、测试 一、首先创建一个js文件填入AES 直接复制以下内容 /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wi…

SpringCloud入门(1) Eureka Ribbon Nacos

这里写目录标题 认识微服务SpringCloud 服务拆分和远程调用服务拆分案例实现远程调用 RestTemplate Eureka注册中心Eureka的结构和作用搭建eureka-server服务注册服务发现 Ribbon负载均衡 LoadBalancedLoadBalancerIntercepor源码解析负载均衡策略饥饿加载 Nacos注册中心安装与…

【NLP】从变形金刚到Transfomer 01

Transformer是一种非常强大的模型&#xff0c;在自然语言处理&#xff08;NLP&#xff09;领域里引起了一场革命。 "从变形金刚到技术革命家&#xff0c;Transformer不再仅是儿时屏幕上的英雄。&#x1f916;✨ 在今天的AI领域&#xff0c;它变身成为自然语言处理的超级英…

通过Anaconda安装Python会得到的重要文件夹

E:\Anaconda\路径下 Scripts 文件夹&#xff1a;该文件夹包含了可执行的Python脚本文件&#xff0c;例如pip和conda等命令行工具。【pip3.exe和django-admin.exe等】Lib 文件夹&#xff1a;该文件夹包含了Python的标准库和其他第三方库的源代码文件。【Lib下面的site-packages…

PID算法原理分析及优化

今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史&#xff0c;其由于结构简单、易于实现、鲁棒性好、可靠性高等特点&#xff0c;在机电、冶金、机械、化工等行业中应用广泛。 在大学期间&#xff0c;参加的智能汽车竞赛中就使用到了PI…

Word文档密码设置:Python设置、更改及移除Word文档密码

给Word文档设置打开密码是常见的Word文档加密方式。为Word文档设置打开密码后&#xff0c;在打开该文档时&#xff0c;需要输入密码才能预览及编辑&#xff0c;为Word文档中的信息提供了有力的安全保障。如果我们需要对大量的Word文档进行加密、解密处理&#xff0c;Python是一…

Python对象类型判断与函数重载

1. 判断对象类型 通过type函数可以知道对象的类型&#xff0c;示例代码如下&#xff1a; x Hello s type(x) print s x Hello s type(x) print s 2. 函数重载 在写函数时&#xff0c;时常遇到需要应付不同的参数类型以及不同的参数数量的情况。 在C中&#xff0c;通常定义多…

安达发|化工涂料利用APS生产计划排程系统能改善什么问题

化工涂料企业利用APS生产计划排程系统可以改善多个方面的问题&#xff1a; 1. 提高生产效率&#xff1a;APS系统能够根据订单需求和产能状况进行中长期排程&#xff0c;统一协调各分厂或车间的生产活动&#xff0c;从而实现均衡生产&#xff0c;减少因生产计划不合理导致的资源…

Ubuntu 安装 KVM 虚拟化

1. Ubuntu 安装 KVM 虚拟化 KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块&#xff0c;它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展&#xff0c;是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用…

前端面试拼图-实践经验

摘要&#xff1a;最近&#xff0c;看了下慕课2周刷完n道面试题&#xff0c;记录并添加部分可参考的文档&#xff0c;如下... 1. H5页面如何进行首屏优化&#xff1f; 路由懒加载 适用于SPA&#xff08;不适用MPA&#xff09; 本质就是路由拆分&#xff0c;有限保证首页加载 服…

命令提示符——CMD基础操作介绍

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

LIN通信开发流程,GENy导入LDF文件、使用GENy生成代码

一、使用GENy导入LDF文件&#xff0c;生成LIN代码 Micro是微控器Cpu&#xff0c;Mcs的12代 Derivativ是此微控器的衍生版&#xff0c;选择适合自己的选项。没有的话&#xff0c;我就是默认第一个MCS12X。 Compile没得选&#xff0c;默认。 填写Channel名&#xff0c;选择LDF文…

Android 开发 地图 polygon 显示信息

问题 Android 开发 地图 polygon 显示信息 详细问题 笔者进行Android项目开发&#xff0c;接入高德地图绘制区域后&#xff0c;需要在指定区域&#xff08;位置&#xff09;内显示文本信息&#xff0c;如何实现 实现效果 解决方案 代码 import com.amap.api.maps.model.T…

基于springboot的反诈宣传平台

技术&#xff1a;springbootmysqlvue 一、系统背景 反欺诈平台可以对公交信息进行集中管理&#xff0c;可以真正避免传统管理的缺陷。反欺诈平台是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff…

NacosException: http error, code=403、NacosimeException——报错解决方法【Nacos2.x】

1、NacosException报错内容为&#xff1a; NacosException: http error, code403,msguser not found!,dataIdapplication-dev.yml,groupDEFAULT_GROUP,tenant连不上是因为成功开启鉴权后&#xff0c;所使用的Spring Cloud服务被拦截&#xff0c;需要在配置中添加Nacos用户名和…

诺视科技完成亿元Pre-A2轮融资,加速Micro-LED微显示芯片商业化落地

近日&#xff0c;Micro-LED微显示芯片研发商诺视科技&#xff08;苏州&#xff09;有限公司&#xff08;以下简称“诺视科技”&#xff09;宣布完成亿元Pre-A2轮融资&#xff0c;本轮融资由力合资本领投&#xff0c;老股东盛景嘉成、汕韩基金以及九合创投持续加码&#xff0c;这…

Echarts中手柄样式更改

代码&#xff1a; dataZoom: [{start: 0,end: 100,left: 100,bottom: 0,right: 140,backgroundColor: yellow,borderRadius: 15,borderColor: green,dataBackground: {lineStyle: {width: 0},areaStyle: {color: black,opacity: 1,}},selectedDataBackground: {lineStyle: {wi…

校企合作,助力人才培养——黄冈师范学院-唯众 “实习实训基地”揭牌仪式顺利举行

3月20日上午&#xff0c;黄冈师范学院计算机学院院长何中林、教务处实习科科长雷汝琳以及计算机学院实验室主任肖飞一行三人&#xff0c;莅临唯众进行参观交流。唯众总经理冉柏权、销售总监舒敏以及董事长助理代西凯进行了热情接待。双方就如何更好地结合企业需求与学院教育资源…

flink1.18.0报错 an implicit exists from scala.Int => java.lang.Integer, but

完整报错 type mismatch;found : Int(100)required: Object Note: an implicit exists from scala.Int > java.lang.Integer, but methods inherited from Object are rendered ambiguous. This is to avoid a blanket implicit which would convert any scala.Int to a…

阿里云2核服务器多少钱一年?

阿里云2核2G服务器配置优惠价格61元一年和99元一年&#xff0c;61元是轻量应用服务器2核2G3M带宽、50G高效云盘&#xff1b;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large&#xff0c;2核2G、3M固定带宽、40G ESSD entry系统盘&#xff0c;阿里云活动链接 aliyunfuwuqi.…