html与css部分基础
原生js篇
1.js组成
ECMAscript BOM DOM
2.js输出内容的方式
1.弹窗alert() 2.网页输出document.write() 3.控制台输出console.log
3.什么是变量
存储临时数据的容器
4.定义变量有几种方式,区别
var 有变量提升,可以重复赋值;
let 没有变量提升,有块级作用域,不可重复赋值;
const 定义的变量不可修改 ,有块级作用域, 定义时没有赋值也不能再次赋值
5.数据类型的分类
基本数据类型和引用数据类型
ES5中5基3引:基:Number String Boolean Undefined Null 引:obj function array
ES6中6基1引:基:Number String Boolean Undefined Null Symbol 引:obj
6.数据类型的转换分类
强制转换和自动转换
7.哪几种数据类型转换为Boolean得到false
" 0 null undefined NaN 转换后得到false 其他得到true
8.查询数据类型的方式
typeof 查询体//查询基本数据类型 返回数据类型
查询体 instanceof 数据类型 //查询引用数据类型。查看查询体是否为该数据类型,是就返回true 不是返回false
9.转化为数字的方式
Number() parseInt() parseFloat()
10.取余的方式
例:5%2 得到1
11前置++和后置++的区别
前置++自身先自增1再参与运算 后置++先参与运算再自增1
12.比较运算符 = == ===的区别
一:表示赋值 二:只比较大小不比较数据类型 三:既比较大小也 比较数据类型
13举例判断a是否等于字符串123
if(a=="123"){}
14.比较运算符有哪些
== === >= <= != > <
15. 年月日分别用变量abc表示,用es6语法拼接
`${a}年${b}月${c}日`
16 +=是什么意思,举例说明
a+=b表示a=a+b
17. js中代码的执行顺序
从上到下,从左到右
18. if和switch的区别
if判断一个范围内或某个具体值
switch判断具体某个状态
19. while循环
while(条件){
//执行代码块
}
20. 循环四要素
1.初始循环变量。2.循环条件。3.更新循环变量。4.循环体(重复执行的代码)
21.终止循环的方式
break;终止循环
continue; 终止本次循环,进入下一次循环
22.函数声明式和表达式的定义方式
1.声明式:function 函数名(){}
2.表达式:let 函数名=function(){}
区别:
1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的。如果函数表达式声明的函数有函数名,那么这个函数名就相当于这个函数的一个局部变量,只能在函数内部调用
2).以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用(函数声明整体会被提升到当前作用域的顶部,函数表达式也提升到顶部但是只有其变量名提升)
3).以函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者try/catch/finally中,而函数表达式可以在任何地方声明。换句话说,函数声明不是一个完整的语句,所以不能出现在if-else,for循环,finally,try catch语句以及with语句中。
22.函数声明式和表达式的区别
声明式:能再函数前后进行调用;
表达式:只能在函数后进行调用
23.函数返回值有什么作用
将函数的执行结果抛出函数体外,供其他程序使用
24.定义一个数组,并用for循环打印出每个元素
var arr=[1,3,4,5];
for(let i=0;i<arr.length;i++){
console.log(arr[i])
}
25.创建数组的方式
1.new字符 let arr=new Array()
2.字面量 let arr=[]
26.foreach遍历数组的方法
数组.foreach(function(value,index){}) //value当次遍历的数组元素 index对应的索引
27.遍历二维数组的方法
双层for循环
28. 反转数组
arr.reverse()
29. 数组拼接为字符串的方法
arr.join('')
30. 修改数组元素 连接多个数组 返回数组元素 查找数组元素
arr.splice(开始索引,删除个数,添加的元素)
arr.slice(开始索引,结束索引) //第二个参数可选,截取数组元素,返回新数组,不会改变原数组
arr.concat(item) //在arr中添加了一个新元素item 并返回新数组,不会改变原数组
arr.indexOf(3) //查找数组中是否存在3,有就返回索引,没有返回-1;
arr.includes(3) //查找数组是否存在3,有就返回true,否则false---es7语法
31.数组排序的方法
数组.sort(function(a,b){
return a-b;
})
32. 对象的分类
自定义对象,内置对象
33. 创建对象的方式
new字符:let obj=new Object()
字面量:let obj={}
34. 对象添加属性和方法的方式/删除属性的方法
1.通用方式:
对象名.属性名=属性值;
对象名.方法名=function(){}
2.字面量独有
let obj={
属性名:属性值,
方法名:function(){},
方法名2:function(){}
}
3.删除属性的方法
delete 对象名.属性名
35.遍历对象的方法,举例说明ss
for(key in obj){
key //键名
obj[key] //键名对应的值
}
36. 内置对象
string对象 Number对象 Math对象
37. 截取字符串的方法
str.substr(开始索引,截取的个数);
str.substring(开始索引,结束索引)
38.替换字符串的方法
str.replace(旧字符,新字符)
如果要替换所有某一个字符
例:将所有的a替换成z
let str="abcda";
str.replace(/a/g,"z")
39. 保留多少位小数的方法
变量.toFixed(多少位小数)
40. 获取82-130的随机整数怎么写
var num=Math.floor(Math.random()*(130-82+1))+82
41. 数学方法有哪几个
Math.ceil向上取整
Math.floor向下取整
Math.random()获取0-1的随机小数
42.如何创建时间对象
let date=new Date()
43 什么是递归
函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件,要么return,要么继续。
44. Bom的顶层对象是什么
BOM顶层对象是window
DOM顶层对象是document
45. 弹窗三剑客是分别是什么
alert();//警告性弹窗
prompt();//提示性弹窗
confirm();//确认性弹窗
46.获取滚动条的距离
var y=document.documentElement.scrollTop //html文档卷起的距离,也就是滚动条距离
或者:window.scrollY // 返回当前文档垂直滚动的像素数,也是滚动条距离
//原生js获取元素距离文档顶部的距离
var y1=元素.getBoundingClientRect().top+document.documentElement.scrollTop
47. 间歇性计时函数和延时性计时函数的写法
setInterval(function(){},1000)
setTimeout(function(){},1000)
48. 在页面上输出当前倒计时还有30秒
let t=30;
let runtime=setInterval(function(){
t--;
document.write(`倒计时${t}秒`);
if(t<=0){
clearInterval(runtime);
}
},1000)
49.如何获取视窗宽高
var w=document.documentElement.clientHight
var h=document.documentElement.clientWidth
50.如何用location 跳转到指定路径
location.href="路径"
51.Dom全称
Document Object MOdel
52. 节点分类
文档节点,元素节点,文本节点,属性节点
53. 原生js通过name属性值获取元素
前提条件:input必须设置name值
document.getElementByName("name值")
54. H5提供的两种获取元素的方法
document.querySelector();
document.querySelectorAll();
55.如何查找父级 子级
子元素.parentNode //获取元素紧挨着的父级
父元素.children //数组形式返回所有子元素,不包括文本节点
父元素.childNodes //数组形式返回所有子元素,包括文本节点
56. 如何创建一个id为box的div并添加到文档中
let el=document.createElement("div");
el.id="box";
document.body.appendChild(el)
57. 替换节点
父节点.replaceChild(新节点,老节点);
58. 删除指定子节点的方法
父节点.removeChild(子节点) //如果想要删除所有子节点,需要获取所有,遍历删除
59. 事件四要素
1.事件源 2.事件类型 3.事件执行函数 4.事件对象
60 注册事件的方式有哪些
1.标签上注册;例:<div onclick=(function(){};)></div>
2.定义函数注册;例:元素.事件名=function(){};
3.监听事件添加; 例:元素.addEventListener("事件名",function(){})
61. 给元素添加文本的三种方式
元素.innerHTML(); 元素.innerText() ;元素.value();
62. 如何获取元素的样式
元素.style.样式名; //只能获取行内样式
63.三目运算简单理解
如果?那么:否则
64.获取事件源,事件类型
事件源:event.target
事件类型:event.type
65.如何阻止浏览器默认行为和冒泡事件
return false
event.preventDefault() //阻止浏览器默认行为
event.stopPropagation()//阻止冒泡事件
65.change事件(重重重)
输入改变事件。
input类型为checkbox时巨好用,点一下触发一次。vue渲染数据时能用上。
HTML+css篇
1.HTML是什么
超文本标记语音
2.动态网页和静态网页的区别
静态网页:代码和内容写好后,不会改变的网页
动态网页:代码和内容写好后,代码虽然不变,但是内容会随着时间,环境,数据库操作结果而改变的网页。
3.手写HTML基本机构
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>网页标题</title>
<head>
<body>
内容
<body>
</html>
4.css如何给文本添加删除线
text-decoration:line-through
5.块级元素和行内元素的区别
块级元素:独占一行,可以直接定义宽高,默认宽度为100%;通常用于网站中的结构,外层的盒子,大型的板块,楼层。
行内元素:多个元素可以放在同一行中,除非超宽自动换行,宽度为内容大小;通常用于组合一行文本的细节。
6.a标签有几种链接方式
3种,外部链接:当前网站跳转到其他网站
内部链接:当前网站,不同页面之间跳转
锚点链接:同一页面内部区间进行跳转。
7.给图片img添加提示文字的两种方式
<img src="" alt="加载失败时的提示文字" title="鼠标悬停时的提示文字">
8.如何重置列表标签的样式
list-style:none
9.form表单中get提交和post提交的区别
get提交:地址栏中带有参数,安全性相对较低,传输数据较小(128kb)
post提交:地址栏不带参数,安全性相对较高,传输数据大(2m)
10.什么是css
层叠样式表
11.css引入方式,常用的方式
内联(行内)样式/内部式/外链式
常用外链式
12.后代选择器有哪些
空格 >
13.选择器的优先级,权重数值
!important(无限大)>行内样式(1000 )>#id(100)>.class/伪类( 10 )>tag(标签)/伪元素(1)>继承(0)>默认(0)
14.用css子选择器找到table下面的td
table>tbody>tr>td
15.如何阻止form表单里button的提交
设置type属性type="button"
16.css如何在元素内容后面插入内容
选择器:after{} 必须和content连用
17.盒子模型的分类 分别怎么转换
标准盒子模型和怪异盒子模型
box-sizing:
content-box标准盒子模型
border-box怪异盒子模型
18.盒子绝对居中的方式
给盒子设置绝对定位,margin:auto ;四个方向分别设置为0;
19.给文本设置字间距
letter-spacing:length //字符,数字,英文,中文都可以使用
20.设置文本两端对齐
text-align:justify
21.超出文字以...代替的方法
overflow:hidden;//超出隐藏
white-space:nowrap;//不换行,强制在一行显示
text-overflow:ellipsis;//超出部分以...代替
22.精灵图的利弊
优势:1.减少请求数。2.提升网站性能。3.减少图片文件数量。
劣势:1.开发过程比较繁琐。2.需要计算测量每一个背景单元的精确位置,进行定位。3.后期新加或删除图标比较麻烦。
23.如何处理图片三像素问题
四种方法
1.父级设置字体大小为0。 font-size:0;
2.浮动
3.图片设置为块级元素,display:block
4.图片使用vertical-align:middle 图片中部对齐。
24.清除浮动的8种方法
面试题
(1)把父级高度写死;---一般不用。
(2)在浮动的元素后面加一个新的块级元素,css设置样式为clear:both; ---偶尔会用
缺点:多出来一个空的元素,影响美观,一般不用。
(3)父级设置属性overflow:hidden-----一般不用(有seo作弊嫌疑)
(4)父级中使用伪类:after
.clearfix:after{
content:'';
height:0;
display:block;
/*前三个属性:相当于创建一个块级元素*/
clear:both;
zoom:1;/*IE6兼容写法*/
}
(5)父级div定义overflow:auto
必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
(6)父级也一起浮动----不用。
(7)父级加属性display:table---不用
(8)浮动元素后面加br标签然后给br加属性clear:both----不用
25.margin塌陷解决方案
(1)为父盒子设置border,为外层添加border后父子盒子.就不是真正意义上的贴合 (可以设置成透明:border:1px solid transparent)。
(2)为父盒子添加overflow:hidden;
(3)为父盒子设定padding值;
(4)为父盒子添加position:fixed;
(5)为父盒子添加 display:table;//不要用这个
(6)利用伪元素给子元素的前面添加一个空元素
html-css-flex
1.获取data-id="值"和data-vice-id="值"
设置自定义属性值保存在标签上,有需要的时候可以通过js取出来
实用性很强
方法:
1.元素.getAttribute("data-id或者data-vice-id")
2.元素.dataset.id或者元素.dataset.viceId
3.jquery data()方法 元素.data("id或者vice-id")
4.jquery attr()方法 元素.attr("data-id"或者"data-vice-id")
2.本地存储
基于H5基础上的新特性----(重点知识,运用广泛)
方法:setItem getItem removeItem clear()
(1)临时存储(会话存储)sessionStorage //方法参照本地存储,这里不作解释
(2)永久储存(本地储存)localStorage
单数据存储:
localStorage.setItem("键名",值);//保存为一个对象的形式
localStorage.getItem("键名");//获取键名对应的数据
localStorage.removeItem("键名");//删出键名对应的数据
localStorage.clear();//清空全部本地存储
多数据存储----又分为数组形式和数组对象形式 ---方法和单数据相同,数据结构不同
JSON是js对象的字符串表示法,它使用文本表示一个js对象的信息,本质是一个字符串。
数组形式--例: var arr=["abc","def"]; localStorage.setItem("user",JSON.stringify(arr));//将数据转换成JSON字符串保存,才能保存原有的结构。 let arr1=JSON.parse(localStorage.getItem("user"));//获取的时候需要将JSON字符串转换成js对象(这里的对象指数组),还原其结构。 console.log(arr1[0]);//打印数组中索引为0的数据,也就是abc
数组对象形式--例: var arr=[{name:"张三",age:18},{name:"王五",age:20}]; localStotage.setItem("info",JSON.sttingify(arr));//存储 let arr1=JSON.parse(localStorage.getItem("info"));//获取 console.log(arr1[0].name);//打印得到数组arr1中索引为0的对象的name属性值,也就是张三
本地存储--断点添加数据(项目实际操作综合案例)
说明:先获取数据,判断是否为null。如果为null,定义新数组保存数据,否则用获取到的数组往里添加数据即可。
例:
//一进页面就获取本有的数据展示,只判断有数据的情况,没有数据不作操作。 //获取一堆元素 var titles = document.querySelectorAll(".title span"), list1 = document.querySelector(".list1"),//显示内容 list=document.querySelectorAll(".content>div"); endBtn = document.querySelector(".list2 button"),//提交按钮 inp = document.querySelector(".inp"),//输入内容 date = document.querySelector(".date");//选择的时间 //标题循环注册事件 for(let i=0;i<titles.length;i++){ titles[i].onclick=function(){ //循环删除类名 for(let a=0;a<titles.length;a++){ //删除标题类名 titles[a].classList.remove("active"); //隐藏对应的内容 list[a].style.display="none"; } this.classList.add("active"); //显示对应的内容,也可以data-id自定义索引来显示 list[i].style.display="block" } } //一进页面就调用数据显示在页面上 var data = localStorage.getItem("info"); if (data != null) { //数据转化为js对象 data = JSON.parse(data); var strs = '';//定义空字符来保存数据 //循环拼接 for (let i = 0; i < data.length; i++) { var listStr = `${data[i].text}   ${data[i].time}`//内容和日期的拼接字符串 strs += `<div>${listStr}<button data-id="${i}">删除</button></div>`//相加 } list1.innerHTML = strs;//赋值给页面 } //提交按钮点击事件 endBtn.onclick = function () { //操作数据 //1.先获取本地存储看是否有数据,如果有就直接往里添加数据 2.如果没有就定义一个数组保存数据,添加到本地存储中. //获取输入的内容和选择的时间并创建对象保存 var textlist = inp.value;//内容 var timelist = date.value;//时间 var alltext = { text: textlist, time: timelist };//创建对象保存 var data = localStorage.getItem("info");//获取本地存储数据 if (data == null) { var arr = [];//定义一个空数组保存数据 arr.push(alltext);//将对象添加到数组中 localStorage.setItem("info", JSON.stringify(arr));//然后将数组添加到本地存储中 } else { //已经有数据 data = JSON.parse(data);//JSON字符串转化为js对象(数组) data.push(alltext);//将对象添加到数组中 localStorage.setItem("info", JSON.stringify(data));//然后将数组添加到本地存储中 } location.reload(); } //删除功能 var btns=document.querySelectorAll(".list1 button"); for(let j=0;j<btns.length;j++){ btns[j].onclick=function(){ console.log(333) this.parentNode.remove(); //获取本地存储数据并转化为js对象,按索引删除 var arr2=JSON.parse(localStorage.getItem("info")); arr2.splice(j,1); //重新添加到本地存储中 localStorage.setItem("info",JSON.stringify(arr2)); if(arr2.length==0){ localStorage.removeItem("info"); } location.reload();//删一次刷新一次页面 } }
3.H5布局标签
<header> //定义头部
<nav> //定义导航
<main> //定义主要内容
<section> //定义文档中的节
<article> //定义页面独立的内容区域
<aside> //定义侧边栏
<footer> //定义页脚
4.transition过渡动画
transition 只能添加在初始样式里。
transition:属性1 时间秒 动画特效 延时时间,属性2 时间秒 动画特效 延时时间;
transition:all 时间秒 动画特效 延时时间;//所有样式都参与动画。
动画特效:
linear: 线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
ease: 平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
ease-in: 由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
ease-out: 由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)
ease-in-out: 由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)
可参照网址http://cubic-bezier.com
5.css3变形
配上过渡动画transition 可实现动画时间的过渡和特效
2d变形 transform
transform 可以同时定义多个属性
//一次性定义平移100px 旋转1800度 缩小0.5倍 transform:translate(100px) rotate(1800deg) scale(0,5,0.5)
1)平移 translate(x,y)//只写一个值表示水平方向平移
2)缩放 scale(x,y) //只写一个值,默认第二个值等于第一个
3)旋转 rotate(deg) //2d旋转,沿顺时针,和Z轴旋转类似
rotateX(deg) //沿X轴3d旋转
rotateY(deg) //沿Y轴3d旋转
rotateZ(deg) //沿Z轴3d旋转
4)斜切skew(x,y) //只提供一个值,则第二个值默认为0
skewX(deg) //水平方向上斜切
skewY(deg) //竖直方向上斜切
6.css3自定义动画
animation-play-state: paused/running;控制动画是否运行 用js配合控制该属性值实现暂停和开始
transform-origin:x y; //定义动画中心点 比如旋转动画可以定义其旋转中心点
animation参数:
animation:1自定义动画名称 2执行时间 3特效 4延时时间 5执行次数(infinite无限循环或者直接给数值) 6是否反序播放(alternate 动画在奇数次(1、3、5...)正向播放,在偶数次(2、4、6...)反向播放) 7控制播放完成帧数(forwards 结束时应用该属性,就是保持结束时的状态);
例:自定义动画 div{ animation:自定义动画名称1 执行时间 特效,自定义动画名称2 执行时间 特效; } @keyframes 自定义的动画名称1{ 0%{background:url(1)no-repeat;} 20%{background:url(2)no-repeat;} 50%{background:url(3)no-repeat;} 75%{background:url(4)no-repeat;} 100%{background:url(5)no-repeat;} } @keyframes 自定义动画名称2{ 0%{transform:translateX(0) rotateY(0)} 49.999%{transform:translateX(800px) rotateY(0)} 50%{transform:translateX(800px) rotate(180deg)} 99.999%{transform:translateX(0) rotate(180deg)} 100%{transform:translateX(0) rotate(0)} }
7.动画库swiper ,移动端轮播插件
使用方法:https://www.swiper.com.cn/usage/index.html
flex布局
注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效
1.容器属性
容器属性 一共六个
flex-direction 表示主轴对齐方式,四个值
flex-direction:row; //水平布局 也是默认的布局
flex-direction:row-reverse; //反向水平布局
flex-direction:column; //垂直布局
flex-direction:column-reverse; //反向垂直布局
flex-wrap定义一条轴线排不下的时候,如何换行 三个值
flex-wrap:wrap; //换行
flex-wrap:nowrap; //不换行
flex-wrap:wrap-reverse; //反向换行,第一行在最下方
flex-flow属性是flex-direction属性和flex-wrap属性的复合形式,默认值为row nowrap,两个值;
flex-flow:row wrap; //水平布局 换行
flex-flow:column nowrap; //垂直布局 不换行
justify-content 英文表示调整内容,定义子项在主轴方向的对齐方式 五个值
justify-content:flex-start; //起点对齐
justify-content:flex-end; //终点对齐
justify-content:center; //居中
justify-content:space-between; //两端对齐,中间间隔一样
justify-content:space-around; //间隔等分,所有子项间隔都相等,所以子项之间的间距比子项与边框的间距大一倍。
align-item 定义项目在交叉轴上如何对齐 有五个值
align-item:flex-start; //交叉轴起点对齐
align-item:flex-end; //交叉轴终点对齐
align-item:center; //交叉轴居中对齐
align-item:baseline; //在第一行文本的基线上对齐 也就是说后面的都按照第一个文本的最底部进行对齐
align-item:stretch; //默认值,如果项目未设置高度或设为auto,将占满整个容器的高度,不设置也行 ,所以用的少
align-content 属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用 ,本属性去掉了间隔,和align-items区分开来
align-content:flex-start; //交叉轴起点对齐
align-content:flex-end; //交叉轴终点对齐
align-content:center; //交叉轴居中对齐
align-content:space-between; //交叉轴两端对齐,中间间隔平均分布
align-content:space-around; //交叉轴间隔等分,子项的间隔比子项与边框的间隔大一倍。
align-content:stretch; //默认值,子项占满整个交叉轴。
2.子元素属性
flex布局子元素的属性 一共有六个属性
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
order: -1
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为1,其他项目都为0,则前者占据所有的剩余空间
flex-grow: 1; //如果其他子项为0 ,本子项就占满整个剩余空间,通常会用复合属性 flex来设置
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效
flex-shrink:0; //设置为0 就不缩小
flex-basis 自定义在主轴的大小,等同于设置的宽高,它的默认值为auto,即项目的本来大小
flex-basis: 300px; //自定义在主轴的大小
flex属性是flex-grow(放大比例), flex-shrink(缩小比例) 和 flex-basis(自定义大小)的简写,默认值为0 1 auto。后两个属性可选。 经常使用该属性来分配剩余空间
flex:1; //这个子元素分配所有的剩余空间 有三个值,通常只用第一个
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch(伸展)
align-self: flex-start;//该子项在交叉轴起点对齐
align-self: flex-end; //该子项在交叉轴的终点对齐
align-self: center; //该子项在交叉轴居中对齐
align-self: baseline; //该子项通过基线对齐
align-self: stretch; //默认,也就是没有设置高度的时候会占满整个容器