JS position:sticky 의 호환성 문 제 를 해결 하 는 방법
4795 단어 JSposition:sticky겸용 하 다
position:sticky 의 호환성 및 역할
Caniuse 에 sticky 의 호환성 은 다음 과 같 습 니 다.
Sticky 의 역할 은 relative 와 fixed 의 결합 체 에 해당 하 는데 수 정 된 목표 노드 가 다시 화면 에 나타 날 때 relative 로 나타 나 고 초과 할 때 fixed 의 형식 으로 나타 나 는데 이 특성 때문에 우 리 는 sticky 의 시 뮬 레이 션 효 과 를 실현 할 수 있다.
sticky 구성 요소 구현
템 플 릿 부분
<template>
<div class="sticky" :style="getPosition">
<div class="sticky-warp">
<slot></slot>
</div>
</div>
</template>
코드 판독:여기 서 제 가 구성 요 소 를 사용 하여 이 루어 졌 습 니 다.명령 을 사용 하지 않 고 이 루어 진 이 유 는 명령 이 침입 성 이 없고 사용 하기에 편리 하지만 한 가지 단점 은 수 정 된 노드 fixed 가 문서 흐름 에서 벗 어 나 스크롤 바 의 높이 를 바 꾸 는 것 입 니 다.네 이 티 브 스크롤 바 에 맞 춰 서 만 이 루어 지 는 것 은 문제 가 되 지 않 습 니 다.(물론 너무 빨리 굴 러 가 는 문제 도 있 습 니 다)그러나 사용자 정의 스크롤 에 맞 춰 서 이 절 충 된 방식 으로 이 루어 집 니 다.가장 바깥쪽 은 sticky 층 으로 브 라 우 저가 sticky 를 지원 하 는 지 판단 하고 지원 하지 않 으 면 relative 로 대체 합 니 다.그러면 브 라 우 저의 높이 를 바 꾸 지 않 고 stick-warp 층 의 postion 을 동적 으로 바 꾸 어 효 과 를 실현 합 니 다.css 부분
<style scoped lang="less" rel="stylesheet/less">
.sticky {
width: 100%;
.sticky-warp {
width: 100%;
background: inherit;
will-change: change;
height: inherit;
top: inherit;
}
}
</style>
코드 해독:이곳 의 warp 층 의 배경 색 설정 은 sticky 와 일치 합 니 다.이렇게 하면 과도 가 너무 딱딱 하지 않 고 높이 와 top 은 사용자 의 대외 층 sticky 사용자 정의 에 따라 이 루어 집 니 다.이 부분 은 css 로 간단하게 완성 할 수 있 습 니 다.JS 부분
<script type="text/babel">
export default {
data () {
return {}
},
computed: {
getPosition(){
var position = this.cssSupport('position', 'sticky') ? 'sticky' : 'relative';
return 'position:' + position;
}
},
props: {},
beforeMount () {
},
mounted(){
this.init();
},
deactivated(){
if(this.cssSupport('position', 'sticky')) {
return;
}
/* */
var elWarp = this.$el.querySelector('.sticky-warp');
elWarp.position = 'absolute';
},
methods: {
init(){
if (this.cssSupport('position', 'sticky')) {
return;
}
var el = this.$el, target = this.$el.parentNode,
elWarp = this.$el.querySelector('.sticky-warp'),
top = this.getNumberValue(document.defaultView.getComputedStyle(el).top);
this.addScrollListen(target, (event)=> {
if (el.getBoundingClientRect().top <= top) {
elWarp.style.position = 'fixed';
}
if (el.getBoundingClientRect().top >= 0 && elWarp.style.position != 'absolute') {
elWarp.style.position = 'absolute';
}
})
},
cssSupport: function (attr, value) {
var element = document.createElement('div');
if (attr in element.style) {
element.style[attr] = value;
return element.style[attr] === value;
} else {
return false;
}
},
getNumberValue(pxValue){
var value = String(pxValue).match(/^\-?\+?[0-9]+/g);
return value ? Number(value) : undefined;
},
addScrollListen(target, cb){
target.addEventListener('y-scroll', (event)=> {
cb && cb(event);
});
}
},
}
</script>
코드 해독:이 안 에는 주로 cssSupport 로 브 라 우 저의 지원 상황 을 판단 한 다음 에 여러 사용자 정의 스크롤 y-scroll 이벤트 의 감청,감청 top 값 의 변 화 를 통 해 sticky-warp 층 의 fixed 와 absolute 전환 을 실현 합 니 다.대략적인 원리 의 사고방식 과 실현 과정 은 바로 위 와 같다.사용자 정의 스크롤 의 github 주소:https://github.com/yejiaming/scroll스티커 구성 요소 와 원생 스크롤 의 명령 을 참고 하여 실 현 된 github 주 소 는 다음 과 같다https://github.com/yejiaming/sticky이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.