加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

JS实现页面侧边栏效果深掘

发布时间:2021-10-13 10:17:19 所属栏目:动态 来源:互联网
导读:这篇文章主要介绍了JS实现页面侧边栏效果探究,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 目录

发现:display动画的应用

 

实现:如何实现文首展示的效果

 

其实效果大概是这样的:

 

 

 

而标题,也许是我当时看到这种效果时的真实感受。因为第一反应是:“还可以把page整体移出页面?”

 

发现:display动画的应用

 

整件事的起因是什么呢?在笔者最近为社团计划的官网上打算做一个这样的效果:点击头像,左边/右边滑出一个“面板”,里面展示用户的个人信息。

 

当然,这有很多种做法,比如:利用position定位+overflow溢出隐藏、利用opacity/visibility隐藏+pointer-events元素穿透… 但是笔者当时想到的是如何给”真正的隐藏,display “加上动画!

 

我们大概都知道的是:HTML渲染过程中有一个可能执行的、影响页面性能的“回流”和“重绘”的过程。导致这个过程被触发的原因有很多:元素位置移动、大小改变、增删节点以及这里要说的display显示与隐藏切换等等。而元素的变动需要页面快速的显示出来,所以在我们看来是“突兀”的。

 

而且有一点需要注意的是:浏览器是“有点智能”的 —— 它可以判断如果会触发页面回流的代码有很多,那么它会将这些代码都读取完再(合并)一起执行 ,所以这也是下面这段代码会有如下图效果的原因:

 

/** css代码 */

width: 50px;

height: 50px;

background-color: red;

display: none;

transform: translateX(0);

transition: all .6s ease; //似乎没用?

 

//js代码

ds.style.display="block";

ds.style.transform="translateX(100px)";

 

 

 

但是同样的,当对以下属性进行操作的时候,由于浏览器的渲染机制有一些API可以使页面强制渲染(因为要获得详细确切的信息),包括:offsetTop、offsetLeft、 offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、clientTop、clientLeft、clientWidth、clientHeight、getComputedStyle() (currentStyle in IE)。这会直接导致前后两行相当于“渲染了两遍”。

 

所以将上方js代码改为下面这样:

 

//js代码

ds.style.display="block";

ds.offsetHeight;

ds.style.transform="translateX(100px)";

 

就可以了

 

 

 

目前csdn官网PC端blink发布页面的图片上传就用了类似这个功能!

 

后来还是觉得这种方式需要涉及js对页面结构的改变,于是乎…

 

实现:如何实现文首展示的效果

 

这基于position定位是会“重合”的:在两个行内元素都设置了定位属性(但没有加top/left/bottom/right定位)后,后面的会覆盖前面的;这时候可以通过margin移动位置展示 。

 

只能是行内元素,行内块元素都不行。 ——云小梦

 

它大概结构是这样的:

 

<div class="page_list">

 <div class="z_two_page">

  <!-- 这里放右侧弹框展示的信息 -->

 </div>

 <div class="box">

  <!-- "页面"的遮罩层 -->

  <div class="zb_mask"></div>

  <!-- 这里放“页面”数据结构(也就是原本应该在body标签下的所有东西) -->

 </div>

 <!-- 这是占位元素 -->

 <div class="space"></div>

</div>

 

实际就像这样的:

 

<div class="page_list">

 <div class="z_two_page">哈哈哈</div>

 <div class="box">

  <div class="zb_mask"></div>

  

  <div id="boxs">

   <div class="left" style="background-color:#ffc5c5;"></div>

   <div class="right" style="background-color:#7171f7;">

    flex下两列布局左边固定右边宽高自适应

   </div>

  </div>

  <div class="color"></div>

  <a href="#" rel="external nofollow" class="a">千万小心像对a设置全局样式(这叫啥样式重置)</a>

  <div class="center">

   <div class="ds"></div>

   <button class="but">到指定地点</button>

  </div>

  <form id="form" action="#">

   <input type="submit" value="="踢脚板 />

  </form>

  <img id="img" src=http://www.0668zz.cn/html/xinwen/dongtai/2021/1013/"compress/compress/img/mxc_16x16.png" />

 </div>

 

 <div class="space"></div>

</div>

 

如上,class为“box”的div里面放的就是“原本的页面整体”部分。为了达到想要的效果,我们采用了flex布局!

 

flex简写时包括三个属性:flex-grow、flex-shrink和flex-basis ——

 

flex-grow:指定了容器剩余空间多余时候的分配规则,默认值是0,多余空间不分配;

 

flex-shrink:指定了容器剩余空间不足时候的分配规则,默认值是1,空间不足要分配;

 

flex-basis:flex-basis则是指定了固定的分配数量,默认值是auto。

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读