选择:
1. 组成BOM的对象中不包含(C)
A. History 历史记录对象:前后网页跳转
B. Screen 屏幕对象:屏幕分辨率,横屏竖屏的监控
C. Document
D. Location 地址对象:获取 url 地址
需要获取实例对象
var btn = document.querySelector('button');
btn.onclick = function () {
console.log(window.location)
};
2. Location上的哪个属性更改不会刷新页面(D)
A. href
B. search
C. host 主机地址 需要联网
D. hash 锚点 例如:网址后面加#abc
var btn = document.querySelector('button');
btn.onclick = function () {
// location.href=location.href;
// location.search=location.search;
// location.host=location.host;
location.hash = location.hash;
};
3. 以下哪个方法没有对数组进行遍历操作(D )
A. Reduce 所有数据里面的函数进行遍历 加三 然后返回新的数组
B. Map 依托于旧的数组创建一个新的数组
C. Sort
D. Pop 干掉数组最后面的一个值并返回
4. userAgent属性不包含下列哪种信息(B)
A.浏览器渲染引擎
B.设备分辨率
C.操作系统
D.浏览器版本
//Navigator 浏览器信息对象(用户代理对象) //火狐 系统 64位 为后面的谷歌和苹果做兼容 86版本
console.log(window.navigator.userAgent); //Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4238.0 Safari/537.36
var div = document.querySelector('div');
div.class = 'duyi';
class是保留字
填空:
1. DOM中文名称为浏览器对象模型,是js操作文档的中介,BOM中文名称为_浏览器对象模型_,是js操作浏览器的中介。
2. History可以通过___方法进行页面回退2步操作。
展开History属性,里面有一个go()方法
console.dir(History); //dir展开
go(-2) //-2回退俩步,+1下一页
3. Label标签通过__for_属性和其他标签进行关联。
4. 数组ForEach和普通的for循环哪个遍历效率更高forEach。
严谨点时分情况的:遍历方式,便利的数据,都会影响
简单模式下是for快
5. 模拟重力场的课中是通过_窗口高度-div高度=div.top___公式判断该物体正好运动到浏览器底部。
第一种方法:
窗口高度-div高度=div.top_
第二种方法
obj.getBoundingClientRect() 返回盒模型的信息 实时性不好
{
width:,
height:,
left:,
top:,
right:, 盒子右边到墙壁左边的距离
bottom, 盒子底部到墙壁上方的距离
}
大题:
1.定义数组:var arr = [{name: ‘cst’, age: ‘18’}, {name: ‘jc’, age: ‘20’}, {name: ‘dxm’, age: ‘50’} , {name: ‘dcg’, age: ‘30’}]。利用filter和map对数组进行操作:留下name中包含c的,并且让他们的年龄都加上自身大小。
var arr = [{ name: 'cst', age: '18' }, { name: 'jc', age: '20' }, { name: 'dxm', age: '50' }, { name: 'dcg', age: '30' }];
var arr2 = arr.filter(function (ele) {
//filter让每个数组都调用这个function,并把这个函数返回true的数据拿出来组成一个新数组
return ele.name.indexOf('c') != -1; //return后的结果为true,表示该数组通过测试,保留该元素,false 则不保留
}).map(function (ele) { //链式操作
//map为创建一个新数组,新数组里的内容为原数组里每个数据都被调用函数后的返回结果
ele.age *= 2; //age的值是字符串类型的,加上自身需要隐式类型转换,×会忽略隐式类型转换
return ele;
});
console.log(arr2);
2.用你能想到较好的,且通用方式把浏览器输入框上的网址(如:https://www.baidu.com/s?ie=utf-8&f=8)按协议:https 主机:www.baidu.com 路径:/s 参数:ie=utf-8&f=8划分并创建对象。 此对象属性和属性值形式如右:
{
protocol: 'https',
host:'www.baidu.com',
path: '/s',
earch: {ie:’utf-8’,f:’8’}
}
答案:
//把地址变成一个对象
var url = new URL('https://www.baidu.com/s?ie=utf-8&f=8');
// console.log(url);
function urlToObj() {
var result = {
protocol: url.protocol, //协议
host: url.hostname, //主机名 因为不包括端口号:8080,所以加name
path: url.pathname, //路径,从域名最后的/开始到域名里的问号前结束,包括/
search: {}
}
//search 从?开始到#前,包括?
第一种方法
/* var str = url.search.substr(1); //ie=utf-8&f=8
var params = str.split('&'); //["ie=utf-8", "f=8"]
params.reduce(function (pre, cur) {
//把数组里的数据都执行函数,最后把所有的结 果合并并返回
var items = cur.split('='); //['ie','utf-8'],['f','8']
pre[items[0]] = items[1];
return pre;
}, result.search); //esult.search={}
console.log(result); */
第二种方法 兼容性不太好
//searchParams是URL对象身上的一个属性,用来获取URL中GET查询参数。
console.log(url.searchParams);
for (var params of url.searchParams) {
//这个对象身上有一个Symbol.iterator,它可以使用for...of(用来遍历具有遍历器接口的数据)
result.search[params[0]] = params[1];
}
console.log(result);
}
urlToObj();
实现一个getDom(str)函数,可以根据参数(str形式如:‘#id’、’.Class’、‘tag’)的不同选择对应选择不同的dom。 注:1.‘#id’此参数为根据id名称选择dom,.Class此参数为根据类名选择dom,‘tag’此参数为根据标签名称获取dom。2.不能使用原生的getElementsByClassName方法
//$ jquery
/* var p=document.querySelector('.color');
var p=document.querySelector('#color');
var p=document.querySelector('p');
$('.color');
$('#color');
$('p'); */
function $(selector) {
if (selector.indexOf('.') != -1) {
var dom = getByClass(selector.substr(1));
} else if (selector.indexOf('#') != -1) {
var dom = document.getElementById(selector.substr(1));
} else {
var dom = document.getElementsByTagName(selector);
}
return dom;
}
function getByClass(classname) {
var allDoms = document.body.querySelectorAll('*'); //取到body里的所有标签,NodeList对象,是一个类数组,不能使用数组里的方法
var allDoms = [].slice.call(document.body.querySelectorAll('*'));
var allDoms = Array.from(document.body.querySelectorAll('*')); //把参数转成数组
console.log(allDoms);
return allDoms.filter(function (ele) {
//ele.classList 返回的是一个class列表(集合对象),不是数组 ['color','active']
//includes() 在数组里找传的参数有没有
return Array.from(ele.classList).includes(classname);
});
}
$('.color').forEach(function (ele) {
ele.innerHTML = 'class选中的';
});
$('#color').innerHTML = 'id选中的';
var ps = $('p');
for (var i = 0; i < ps.length; i++) {
ps[i].style.background = 'green'; //剩余标签变色
}
4. 请尝试写出缓冲运动的效果。
<style>
.move {
width: 200px;
height: 200px;
background: pink;
position: absolute;
left: 0;
top: 200px;
}
</style>
<div class="move"></div>
startMove($('.move')[0], 800); function startMove(obj, target) { clearInterval(obj.timer); var speed = null;
obj.timer = setInterval(function () {
speed = (target - obj.offsetLeft) / 7;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (obj.offsetLeft == target) {
clearInterval(obj.timer);
} else {
obj.style.left = obj.offsetLeft + speed + 'px';
}
}, 30);
}
5. 请用伪代码(用中文分步描述逻辑)写出轮播图的制作思路。
1. 5张图片,匀速运动
2. 布局:大框相对定位,图片绝对定位,图片弹性盒模型
3. 运动:索引值,运动一下-1(向左边移动)
4. 图片全部展示完,回到第一个图片
5. 按钮:左边不超过0,右边不超过4,点击一次加1块的距离
6. 圆点:对应相对的索引值,第5个和第一个绑定的是一个小圆点