欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
display動(dòng)畫(huà)的應用

發(fā)現:display動(dòng)畫(huà)的應用

整件事的起因是什么呢?在筆者最近為社團計劃的官網(wǎng)上打算做一個(gè)這樣的效果:點(diǎn)擊頭像,左邊/右邊滑出一個(gè)“面板”,里面展示用戶(hù)的個(gè)人信息。

當然,這有很多種做法,比如:利用position定位+overflow溢出隱藏、利用opacity/visibility隱藏+pointer-events元素穿透… 但是筆者當時(shí)想到的是如何給”真正的隱藏,display“加上動(dòng)畫(huà)!

我們大概都知道的是:HTML渲染過(guò)程中有一個(gè)可能執行的、影響頁(yè)面性能的“回流”和“重繪”的過(guò)程。導致這個(gè)過(guò)程被觸發(fā)的原因有很多:元素位置移動(dòng)、大小改變、增刪節點(diǎn)以及這里要說(shuō)的display顯示與隱藏切換等等。而元素的變動(dòng)需要頁(yè)面快速的顯示出來(lái),所以在我們看來(lái)是“突?!钡?。
而且有一點(diǎn)需要注意的是:瀏覽器是“有點(diǎn)智能”的 —— 它可以判斷如果會(huì )觸發(fā)頁(yè)面回流的代碼有很多,那么它會(huì )將這些代碼都讀取站長(cháng)交易完再(合并)一起執行,所以這也是下面這段代碼會(huì )有如下圖效果的原因:

/** css代碼 */width: 50px;height: 50px;background-color: red;display: none;transform: translateX(0);transition: all .6s ease;   //似乎沒(méi)用?

//js代碼

ds.style.display="block";

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

但是同樣的,當對以下屬性進(jìn)行操作的時(shí)候,由于瀏覽器的渲染機制有一些API可以使頁(yè)面強制渲染(因為要獲得詳細確切的信息),包括:offsetTop、offsetLeft、 offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、clientTop、clientLeft、clientWidth、clientHeight、getComputedStyle() (currentStyle in IE)。這會(huì )直接導致前后兩行相當于“渲染了兩遍”。

所以將上方js代碼改為下面這樣:

//js代碼

ds.style.display="block";

ds.offsetHeight;

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

目前csdn官網(wǎng)PC端blink發(fā)布頁(yè)面的圖片上傳就用了類(lèi)似這個(gè)功能!

后來(lái)還是覺(jué)得這種方式需要涉及js對頁(yè)面結構的改變,于是乎…

實(shí)現:如何實(shí)現文首展示的效果

這基于position定位是會(huì )“重合”的:在兩個(gè)行內元素都設置了定位屬性(但沒(méi)有加top/left/bottom/right定位)后,后面的會(huì )覆蓋前面的;這時(shí)候可以通過(guò)margin移動(dòng)位置展示。

只能是行內元素,行內塊元素都不行。 ——云小夢(mèng)

它大概結構是這樣的:

<div>

<div>

<!-- 這里放右側彈框展示的信息 -->

</div>

<div>

<!-- "頁(yè)面"的遮罩層 -->

<div></div>

<!-- 這里放“頁(yè)面”數據結構(也就是原本應該在body標簽下的所有東西) -->

</div>

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

<div></div></div>

實(shí)際就像這樣的:

<div>

<div>哈哈哈</div>

<div>

<div></div>

<div id="boxs">

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

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

  flex下兩列布局左邊固定右邊寬高自適應

  </div>

</div>

<div></div>

<a href="#">千萬(wàn)小心像對a設置全局樣式(這叫啥樣式重置)</a>

<div>

<div></div>

<button>到指定地點(diǎn)</button>

</div>

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

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

</form>

<img id="img" src="compress/compress/img/mxc_16x16.png" />

</div>

<div></div></div>

如上,class為“box”的div里面放的就是“原本的頁(yè)面整體”部分。為了達到想要的效果,我們采用了flex布局!

flex簡(jiǎn)寫(xiě)時(shí)包括三個(gè)屬性:flex-grow、flex-shrink和flex-basis ——

flex-grow:指定了容器剩余空間多余時(shí)候的分配規則,默認值是0,多余空間不分配;

flex-shrink:指定了容器剩余空間不足時(shí)候的分配規則,默認值是1,空間不足要分配;

flex-basis:flex-basis則是指定了固定的分配數量,默認值是auto。設置的同時(shí)需設置width或者height屬性;

/* 列表僅水平滾動(dòng) */.page_list {

    width: 100vw; display: flex; overflow-y: hidden; }/* 主內容寬度100%,白色背景覆蓋 */.box {

    flex: 0 0 100vw; height: 100%; background-color: #fff; position: relative; overflow-y: auto;overflow-x: hidden;transition: all .6s ease; }/** 遮罩層樣式 */.zb_mask{

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

z-index: 100;

background-color: rgba(0,0,0,.2);

pointer-events: none;

opacity: 0;

transition: all .6s ease;}/* 空標簽元素,作用是騰出水平滾動(dòng)空間 */.space {

    flex: 0 0 12rem; }/* 按鈕固定定位,藏在內容白色背景后面 */.z_two_page {

    width: 12rem;  position: fixed; right: 0; top: 0; }

大概就是:什么也不干的情況下只展示box的內容(也就是和不加這些花里胡哨的div一樣的效果),它是用background覆蓋后面的class為“space”的占位元素;在”哈哈哈“展示的時(shí)候,box右移。

這里需要注意的是:為什么“哈哈哈”所屬div在前而“頁(yè)面”所屬div在后?
因為根據前面所說(shuō),這里采用的是position覆蓋,它的規則就是“后面的覆蓋前面的”,所以如果采用這種布局方式,那么一開(kāi)始被隱藏的元素就要放在前面。

代碼中flex的前兩個(gè)屬性值為0,表示在空間增大或縮小時(shí)依然保持原狀(這是本文的基礎?。?,第三個(gè)元素則寫(xiě)了展示時(shí)的“默認大小”:如你所看,box承載的是頁(yè)面,所以它是100vw,而class為“z_two_page”的元素這里設置了12rem ,你完全可以將這個(gè)值換掉!

那如何將“哈哈哈”展示在視野中? —— js控制“代表頁(yè)面的元素”整體移動(dòng)即可。

這里有個(gè)“遮罩層效果”,按照傳統的js實(shí)現肯定就要去找display了,再進(jìn)一步可以用上面所說(shuō)的“display動(dòng)畫(huà)效果”增強體驗。
但是本文上面css代碼中加了 pointer-events 屬性:元素是否穿透;設置為none時(shí)就可以不用在意對應元素是否存在了(從事件上看此時(shí)有和沒(méi)有一樣了),也就不用控制display什么的,大大增強性能了有木有!

let right=document.querySelector(".right");let box=document.querySelector(".box");let mask=document.querySelector(".zb_mask");

right.onclick=function(){

  box.style.marginLeft="-12rem";

  mask.style.cssText+="opacity: 1;pointer-events: all;"}

mask.onclick=function(){

  box.style.marginLeft="0";

  mask.style.cssText+="opacity: 0;pointer-events: none;"}

最后,考慮到移動(dòng)端頁(yè)面展示的一些問(wèn)題,比如:右側留白問(wèn)題、原生手勢對頁(yè)面整體的影響等,我們一般會(huì )在css中設置 html{max-width: 100vw;overflow-x: hidden;} 。如果你想要用戶(hù)在移動(dòng)端依然只能夠通過(guò)點(diǎn)擊彈出側邊欄,在這里我們可以在css中加上限制 —— 設置上方功能只有在PC端生效:

@media (any-hover: none) {

.page_list{

overflow-x: hidden;

}

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
div+css使用技巧(原創(chuàng )教程)
BFC的深層理解和應用場(chǎng)景及布局方式
在瀏覽器窗口上添加遮罩層的方法
flex布局中,保持內容不超出容器的解決辦法
前端開(kāi)發(fā)過(guò)程中,設置css引起的一些bug現象及解決方法
div沾滿(mǎn)剩余空間 flex
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久