国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue+elementUi獲取滾動條位置、判斷是否存在滾動條、addEventListener、removeEventListener、document、window、scroll、client

這篇具有很好參考價(jià)值的文章主要介紹了vue+elementUi獲取滾動條位置、判斷是否存在滾動條、addEventListener、removeEventListener、document、window、scroll、client。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


1、vue2獲取滾動條位置

document方式

export default {
	name: "demo",
	data() {
		return {
			scrollTopVal: 0,
			isScroll: 0
		};
	},
	mounted() {
		this.$nextTick(() => {
			// 開啟滾動條監(jiān)聽
			document.addEventListener("scroll", this.scrollTop, true);
			
			let elVal = document.getElementsByClassName('el-drawer__body')[0];
			this.isScroll = elVal.scrollHeight > elVal.clientHeight;
		});
	},
	beforeDestroy() {
		document.removeEventListener('scroll', this.scrollTop, true);
	},
	
	methods: {
		scrollTop() {
			let elVal = document.getElementsByClassName('el-drawer__body')[0];
			this.scrollTopVal = elVal.scrollTop;
		}
	}
};

window方式

export default {
	name: "demo",
	data() {
		return {
			scrollTopVal: 0,
			isScroll: 0
		};
	},
	mounted() {
		this.$nextTick(() => {
			// 開啟滾動條監(jiān)聽
			window.addEventListener("scroll", this.scrollTop, true);
			
			let elVal = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
			this.isScroll = elVal.scrollHeight > elVal.clientHeight;
		});
	},
	beforeDestroy() {
		window.removeEventListener('scroll', this.scrollTop, true);
	},

	methods: {
		scrollTop() {
			let elVal = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
			this.scrollTopVal = elVal.scrollTop;
		},
	}
};

2、vue3獲取滾動條位置

公共部分

import { nextTick, ref, onMounted, onBeforeUnmount } from "vue";

let scrollTopVal = ref<number>(0);
let isScroll = ref<boolean>(false);

document方式

onMounted(() => {
	// 監(jiān)聽滾動條位置
	document.addEventListener("scroll", scrollTop, true);
	
	// 設(shè)置對應(yīng)元素的滾動條
	let elVal: any = document.getElementsByClassName('el-drawer__body')[0];
	// 判斷是否存在滾動條
	isScroll.value = elVal.scrollHeight > elVal.clientHeight;
});

// 實(shí)時(shí)滾動條高度
const scrollTop = () => {
	nextTick(() => {
		let elVal: any = document.getElementsByClassName('el-drawer__body')[0];
		scrollTopVal.value = elVal.scrollTop;
	});
};

onBeforeUnmount(() => {
	// 參數(shù)必須和掛載時(shí)保持一致
	document.removeEventListener('scroll', scrollTop, true);
});

window方式

onMounted(() => {
	// 監(jiān)聽滾動條位置
	window.addEventListener('scroll', scrollTop, true);
	
	let elVal: any = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
	isScroll.value = elVal.scrollHeight > elVal.clientHeight;
});

// 實(shí)時(shí)滾動條高度
const scrollTop = () => {
	nextTick(() => {
		let elVal: any = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
		scrollTopVal.value = elVal.scrollTop;
	});
};

onBeforeUnmount(() => {
	// 參數(shù)必須和掛載時(shí)保持一致
	window.removeEventListener('scroll', scrollTop, true);
});

3、解析

1、獲取指定元素的滾動條值。在elementUi組件中需要通過class獲取,因?yàn)?code>id是動態(tài)值。
2、使用window方式時(shí),只能檢測到body或頁面窗口的滾動條。然而對于elementUi的彈窗等組件獲取到的滾動條值為0
3、addEventListener第三個(gè)參數(shù)表示深度監(jiān)聽,在某些場景如果不設(shè)置第三個(gè)參數(shù)值為true,可能監(jiān)聽不到對應(yīng)的事件。
4、addEventListener第二個(gè)參數(shù)需要一個(gè)函數(shù)值,可以直接以函數(shù)的形式寫在里面,但是不推薦這樣寫。
5、addEventListener第一個(gè)參數(shù)便是對應(yīng)的事件名稱,有滾動事件和鼠標(biāo)事件等其他事件。
6、必須銷毀scroll事件,因?yàn)槭?code>vue是單頁面應(yīng)用,如果不銷毀,離開該頁面后事件依然會存在,影響瀏覽器的性能,并且在vue3中直接報(bào)錯。所以在離開此頁面之前應(yīng)該銷毀全局監(jiān)聽事件,可以在組件銷毀之前銷毀全局監(jiān)聽事件。


4、判斷是否存在滾動條

判斷是否存在滾動條的需求,在彈窗插件中使用得較多。因?yàn)閺棿按蠖鄷砑?code>overflow: hidden;屬性,如果頁面超過一屏的話,添加這個(gè)屬性之后頁面會有晃動。
為了增強(qiáng)用戶體驗(yàn),通過判斷是否有滾動條而添加margin-left屬性以抵消overflow: hidden;之后的滾動條位置。


判斷豎向滾動條

console.log(el.scrollHeight > el.clientHeight);

判斷橫向滾動條

console.log(el.scrollWidth > el.clientWidth);

特殊情況

當(dāng)元素指定overflow: hidden;時(shí),不會出現(xiàn)滾動條。所以需要對元素是否應(yīng)用了overflow: hidden;進(jìn)行判斷。

function hasScrolled(ele, dir = "vertical") {
  // 判斷的方向是否設(shè)置了overflow: hidden;
  let style = window.getComputedStyle(ele);
  if (
    (dir == "vertical" && style.overflowY == "hidden") ||
    (dir == "horizontal" && style.overflowX == "hidden")
  )
    return false;

  // 在判斷完overflow不為hidden后,再通過兩個(gè)屬性來判斷。
  if (dir == "vertical") {
    return ele.scrollHeight > ele.clientHeight;
  } else {
    return ele.scrollWidth > ele.clientWidth;
  }
}

但是,以上的方法不嚴(yán)謹(jǐn),當(dāng)容器產(chǎn)生外邊距合并的時(shí)候,也是ele.scrollWidth > ele.clientWidth。


<div class="box">
	<h1>子元素內(nèi)部內(nèi)容</h1>
</div>

let box = document.querySelector(".box");

// scrollHeight: 63
console.log("scrollHeight: " + box.scrollHeight);
// clientHeight: 42
console.log("clientHeight: " + box.clientHeight);
// 是否有滾動條: true
console.log("是否有滾動條: ", box.scrollHeight > box.clientHeight);

特殊情況較完美的處理方式

function hasScrolled(ele, dir = "vertical") {
	let eleScroll = dir == "vertical" ? "scrollTop" : "scrollLeft";
	
	// 判斷scroll數(shù)值是否為0,還是其他值
	let result = !!ele[eleScroll];
	// 如果是其他數(shù)值(非0)這表示有滾動條
	// 如果是0,則嘗試移動一下滾動條,判斷是否能夠移動
	if (!result) {
		// 嘗試移動滾動條
		ele[eleScroll] = 1;
		// 再次確認(rèn)數(shù)值
		result = !!ele[eleScroll];
		// 恢復(fù)原位
		ele[eleScroll] = 0;
	}
	
	// 得出結(jié)果
	return result; 
}

計(jì)算滾動條寬度的方法

因?yàn)橐苿佣藶g覽器的滾動條都是不占據(jù)頁面寬度的透明樣式,所以為了進(jìn)一步增強(qiáng)用戶體驗(yàn),我們還需要計(jì)算滾動條的寬度,根據(jù)情況添加合理的margin-left值。
新建一個(gè)帶有滾動條的div元素,再計(jì)算該元素offsetWidthclientWidth的差值。
文章來源地址http://www.zghlxwxcb.cn/news/detail-640041.html

function getScrollbarWidth() {
	let scrollDiv = document.createElement("div");
	scrollDiv.style.cssText = "width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;";
	document.body.appendChild(scrollDiv);
	let scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
	document.body.removeChild(scrollDiv);
	
	return scrollbarWidth;
}

到了這里,關(guān)于vue+elementUi獲取滾動條位置、判斷是否存在滾動條、addEventListener、removeEventListener、document、window、scroll、client的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • selenium 判斷元素是否存在

    目的:自動化中通常需要根據(jù)元素是否存在,來決定下一步的動作;比如 A存在就點(diǎn)擊 下一步,B存在就點(diǎn)擊保存;用于控制腳本的邏輯; selenium中判斷元素有幾種方式 1、find_element(locateType, locate) 2、WebDriverWait(self.driver, 20, 0.5).until(EC.presence_of_element_located((locateType, locate))) 那么

    2024年01月20日
    瀏覽(98)
  • RestHighLevelClient 判斷索引是否存在

    2024年01月24日
    瀏覽(226)
  • Python如何判斷變量是否存在?

    python中可以使用locals()、dir()、vars()等函數(shù)來查詢變量是否存在。 1、 locals() 函數(shù)將當(dāng)前位置的所有局部變量作為字典返回。 2、當(dāng) dir() 函數(shù)不帶參數(shù)時(shí),它返回當(dāng)前范圍內(nèi)的變量、方法和定義類型的列表;當(dāng)它接受參數(shù)時(shí),它返回參數(shù)的屬性和方法列表。 3、vars() 函數(shù)返回對

    2024年02月11日
    瀏覽(100)
  • 【ElasticSearch】判斷該索引是否存在

    es7.10

    2024年02月17日
    瀏覽(92)
  • vue elementui 組合式 api 對于容器的滑動條的位置的獲取與設(shè)置。切換頁面可以保持原來的容器里的滑動條位置不變

    需要使用 addEventListener 的方法獲取滑動條的位置 xxx.vue 頁面是一直緩存的,所以使用路由進(jìn)入鉤子(onActivated)設(shè)置滑動條的位置 App.vue: xxx.vue

    2024年02月09日
    瀏覽(20)
  • js中判斷一個(gè)對象是否存在

    js中判斷一個(gè)對象是否存在

    一、Boolean()方法 用Boolean()方法可以將Js中的任意數(shù)據(jù)類型轉(zhuǎn)為布爾值: 二、用于判斷xx是否存在 js一般會自動執(zhí)行Boolean()方法,我們可以借此判斷某個(gè)對象在js當(dāng)前的執(zhí)行環(huán)境中知否存在。如: 又如,可以判斷當(dāng)前環(huán)境下某個(gè)對象是否存在。 在為一個(gè)元素綁定了某個(gè)事件后,

    2024年02月13日
    瀏覽(97)
  • pyspark 判斷 Hive 表是否存在

    pyspark.sql.Catalog.tableExists

    2024年02月14日
    瀏覽(89)
  • Java如何判斷某文件目錄是否存在

    在java中如何判斷某文件所在的目錄是否存在,若不存在創(chuàng)建目錄 可以通過國使用 File 類的 getParentFile() 方法來獲取文件所在的目錄,并通過 exists() 方法來判斷該目錄是否存在,若不存在,通過 mkdirs() 方法創(chuàng)建目錄,以下為實(shí)例 或直接簡寫

    2024年02月12日
    瀏覽(176)
  • windows11--判斷文件夾是否存在

    windows11--判斷文件夾是否存在

    不想全盤檢索,只是想判斷當(dāng)前文件夾下,是否存在名為xxx的子文件夾 打開你要進(jìn)行搜索的文件夾 點(diǎn)擊上面的地址欄,輸入cmd,按下回車鍵,進(jìn)入cmd 界面 輸入 dir /b | find \\\"xxx文件名\\\" (補(bǔ)充:輸入 dir /b\\\" 可列出所有子文件的名字) 如果xxx文件存在,則返回xxx 如果xxx文件不存

    2024年01月21日
    瀏覽(95)
  • js判斷對象是否存在某個(gè)屬性的辦法

    在 JavaScript 開發(fā)中,判斷一個(gè)對象是否存某個(gè)屬性在是非常基礎(chǔ)的操作,也是開發(fā)者經(jīng)常需要處理的問題之一。然而,繁瑣的代碼可能會讓我們感到疲憊不堪,因此這里將介紹幾種 JavaScript 小技巧,幫助你更高效地判斷對象屬性的存在性,提高代碼效率?。 ?? 技巧一: 使用

    2024年02月09日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包