国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - js教程 - JS實(shí)現(xiàn)頁面?zhèn)冗厵谛Ч骄?

JS實(shí)現(xiàn)頁面?zhèn)冗厵谛Ч骄?/h1>

2021-12-29 14:51行舟客 js教程

這篇文章主要介紹了JS實(shí)現(xiàn)頁面?zhèn)冗厵谛Ч骄?本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

其實(shí)效果大概是這樣的:

而標(biāo)題,也許是我當(dāng)時(shí)看到這種效果時(shí)的真實(shí)感受。因?yàn)榈谝环磻?yīng)是:“還可以把page整體移出頁面?”

發(fā)現(xiàn):display動(dòng)畫的應(yīng)用

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

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

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

/** 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)";

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

所以將上方j(luò)s代碼改為下面這樣:

//js代碼
ds.style.display="block";
ds.offsetHeight;
ds.style.transform="translateX(100px)";

就可以了


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

后來還是覺得這種方式需要涉及js對(duì)頁面結(jié)構(gòu)的改變,于是乎…

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

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

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

它大概結(jié)構(gòu)是這樣的:

<div class="page_list">
	<div class="z_two_page">
		<!-- 這里放右側(cè)彈框展示的信息 -->
	</div>
	<div class="box">
		<!-- "頁面"的遮罩層 -->
		<div class="zb_mask"></div>
		<!-- 這里放“頁面”數(shù)據(jù)結(jié)構(gòu)(也就是原本應(yīng)該在body標(biāo)簽下的所有東西) -->
	</div>
	<!-- 這是占位元素 -->
	<div class="space"></div>
</div>

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

<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下兩列布局左邊固定右邊寬高自適應(yīng)
		 </div>
		</div>
		<div class="color"></div>
		<a href="#" rel="external nofollow" class="a">千萬小心像對(duì)a設(shè)置全局樣式(這叫啥樣式重置)</a>
		<div class="center">
			<div class="ds"></div>
			<button class="but">到指定地點(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 class="space"></div>
</div>

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

flex簡寫時(shí)包括三個(gè)屬性:flex-grow、flex-shrink和flex-basis ――

  • flex-grow:指定了容器剩余空間多余時(shí)候的分配規(guī)則,默認(rèn)值是0,多余空間不分配;
  • flex-shrink:指定了容器剩余空間不足時(shí)候的分配規(guī)則,默認(rèn)值是1,空間不足要分配;
  • flex-basis:flex-basis則是指定了固定的分配數(shù)量,默認(rèn)值是auto。

設(shè)置的同時(shí)需設(shè)置width或者h(yuǎn)eight屬性;

/* 列表僅水平滾動(dòng) */
.page_list { width: 100vw; display: flex; overflow-y: hidden; }
/* 主內(nèi)容寬度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;
}
/* 空標(biāo)簽元素,作用是騰出水平滾動(dòng)空間 */
.space { flex: 0 0 12rem; }
/* 按鈕固定定位,藏在內(nèi)容白色背景后面 */
.z_two_page { width: 12rem; position: fixed; right: 0; top: 0; }

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

這里需要注意的是:為什么“哈哈哈”所屬div在前而“頁面”所屬div在后?
因?yàn)楦鶕?jù)前面所說,這里采用的是position覆蓋,它的規(guī)則就是“后面的覆蓋前面的”,所以如果采用這種布局方式,那么一開始被隱藏的元素就要放在前面。

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

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

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

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

@media (any-hover: none) {
	.page_list{
		overflow-x: hidden;
	}
}

到此這篇關(guān)于JS實(shí)現(xiàn)頁面?zhèn)冗厵谛Ч骄康奈恼戮徒榻B到這了,更多相關(guān)js頁面?zhèn)冗厵趦?nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_43624878/article/details/111567722

延伸 · 閱讀

精彩推薦
  • js教程ES5和ES6中類的區(qū)別總結(jié)

    ES5和ES6中類的區(qū)別總結(jié)

    這篇文章主要給大家介紹了ES5和ES6中類的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋...

    Totora612122021-12-16
  • js教程Javascript 模擬mvc實(shí)現(xiàn)點(diǎn)餐程序案例詳解

    Javascript 模擬mvc實(shí)現(xiàn)點(diǎn)餐程序案例詳解

    這篇文章主要介紹了Javascript 模擬mvc實(shí)現(xiàn)點(diǎn)餐程序案例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參...

    LiOnTalKING12072021-12-18
  • js教程JavaScript實(shí)現(xiàn)通訊錄功能

    JavaScript實(shí)現(xiàn)通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    書寫夢(mèng)想的鉛筆頭5622021-12-20
  • js教程javascript的事件描述

    javascript的事件描述

    本文主要為大家介紹javascript事件的基礎(chǔ)知識(shí),有需要的朋友可以參考下...

    js教程網(wǎng)9362021-12-15
  • js教程詳解JavaScript中分解數(shù)字的三種方法

    詳解JavaScript中分解數(shù)字的三種方法

    這篇文章主要介紹了在JavaScript中分解數(shù)字的三種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...

    Hunter網(wǎng)絡(luò)安全6052021-12-27
  • js教程JS+CSS實(shí)現(xiàn)過渡特效

    JS+CSS實(shí)現(xiàn)過渡特效

    這篇文章主要為大家詳細(xì)介紹了JS+CSS實(shí)現(xiàn)過渡特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    Dr_空山3562021-12-23
  • js教程Selenium執(zhí)行JavaScript腳本的方法示例

    Selenium執(zhí)行JavaScript腳本的方法示例

    這篇文章主要介紹了Selenium執(zhí)行JavaScript腳本的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友...

    測(cè)試開發(fā)小記6222021-12-23
  • js教程JavaScript代碼實(shí)現(xiàn)簡單計(jì)算器

    JavaScript代碼實(shí)現(xiàn)簡單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了JavaScript代碼實(shí)現(xiàn)簡單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    小蟲蟲~3992021-12-21
主站蜘蛛池模板: 亚洲午夜精品视频 | 国产成人在线看 | 日韩欧美精品在线 | 亚洲精品一区二区三区不 | 动漫泳衣美女 | а天堂中文最新一区二区三区 | 国产一区在线视频观看 | 午夜精品一区二区三区在线观看 | 精品久久久久久久久久 | 中文字幕视频在线观看 | 国产一区免费 | 综合九九 | 亚洲综合视频在线观看 | 免费看黄色大片 | 91嫩草视频在线 | 亚洲黄色成人 | 亚洲日本电影 | 亚洲欧美在线视频 | 亚洲成人综合网站 | 成人h动漫精品一区二区樱花 | 免费毛片视频 | 草久在线视频 | 亚洲成人av在线 | 一区二区精品视频 | 欧美午夜一区二区三区免费大片 | 日韩中文字幕视频在线观看 | 久久小草 | 国产一区二区三区在线视频观看 | 欧美一区二区在线视频 | 免费观看一级视频 | 色乱码一区二区三区网站 | 成人免费网站 | 一级毛片在线免费看 | 99精品视频在线观看 | 综合久久综合久久 | 91精品欧美久久久久久动漫 | 久久99精品久久久久久国产越南 | 午夜天堂精品久久久久 | 欧美久久久精品 | 日韩高清一区二区 | 国产精品久久久久久久久久久久冷 |