当前位置:
首页 > temp > JavaScript教程 >
-
高级前端进阶(二)
滚动条挤压页面问题(开胃小菜)
滚动条挤压页面,我们可能没怎么注意到这个问题。
直接看图吧
let container = document.getElementById("container");
let scrollWidth = container.offsetWidth - container.clientWidth;
console.log('scrollWidth', scrollWidth); // 谷歌浏览器滚动条占据17px
如何让滚动条不挤压页面呢?
overflow还有个值就是overlay,相当于让滚动条悬浮。这个方法只适用于谷歌浏览器。
还有个方法很自然能够想到,既然滚动条占据17px,那通过margin-right: -17px,不就行了,专门弄出17px给滚动条即可,然后页面padding-right: 17px,这样就不会出现挤压页面的问题了。
本质就是滚动条占据了容器的17px宽度,根据这个可以衍生出很多方法。
所谓一生二,二生三,三生万物。本质上是不变的。
一、CSS中的圣杯布局跟双飞翼布局
这两种布局都是三栏布局,而且实现的效果都是一样的,中间的一块宽度自适应,并且是先加载。
圣杯布局跟双飞翼布局,这两种布局方式,我们应该或多或少接触过。以前主要是通过浮动float来实现的,但现在有了flex,以前的方式就不香了,毕竟有更好的布局方式了。
在这里,着重讲解一下,通过flex实现圣杯布局或者双飞翼布局的效果。
代码很简单。
<div class="container">
<diV class="main">main</diV>
<diV class="left">left</diV>
<diV class="right">right</diV>
</div>
/*scss*/
.container{
display: flex;
justify-content: center;
.main{
flex-grow: 1;
order: 2;
background-color: red;
}
.left{
flex-basis: 200px;
order: 1;
background-color: orange;
}
.right{
flex-basis: 200px;
order: 3;
background-color: paleturquoise;
}
}
浏览器是从左到右解析代码的,所以我们要让main部分在最左边,然后通过order来处理位置。让flex-grow来实现自适应效果。
简单吧!
二、复习一下上次讲解的有关递归知识
list转树型数据(上一篇博客地址)
寻找树型数据中的某个节点(包含所有的子节点)
function findTreeNode(tree, fn, childrenName) {
if (childrenName == undefined)
childrenName = 'children';
for (let item of tree) {
if (fn(item))
return item;
if (item[childrenName]) {
let res = findTreeNode(item[childrenName], fn);
if (res)
return res;
}
}
}
let treeNode = findTreeNode(listToTree(treeList), (item) => item.id == 1);// 使用的是上篇博客的数据
console.log("treeNode", treeNode);// {"id":1,"pid":0,"name":"一级数据1","children":[{"id":4,"pid":1,"name":"二级数据2-1"},{"id":5,"pid":1,"name":"二级数据2-2"},{"id":6,"pid":1,"name":"二级数据2-3"}]}
三、改变this指向问题
复习一下,apply,call,bind这三种方法。
function test(item) {
console.log(item);
}
var param = {
q: 1,
w: 2
};
test(param);
test.apply(null, [param]);
test.call(null, param);
test.bind(null, param)();// 以上四者是等价的
// 更改this指向
var obj = {
param: {
z: 6
},
newTest(item) {
console.log(this.param)
//console.log(item);
}
}
obj.newTest.apply(this, [param]);// 等价于 obj.newTest.apply(window, [param]);// 输出 {"q":1,"w":2}
obj.newTest.apply(obj, [param]);// 输出 {"z":6}
来源:https://www.cnblogs.com/ywjbokeyuan/p/15111573.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数