dataset 기반 사용 및 그림 지연 로드 실현 방법

우선 자바 script 의 dataset 속성 에 대해 소개 합 니 다.
html 5 에 서 는 데이터-접 두 사 를 사용 하여 사용자 정의 속성 을 설정 하여 데 이 터 를 저장 할 수 있 습 니 다.
다음은 요소 가 data 속성 을 응용 하 는 예 입 니 다.

<div id="day-meal-expense" data-drink="tea" data-food="noodle" data-meal="lunch">$18.3</div>
어떤 속성의 값 을 가 져 오 려 면 아래 와 같이 dataset 대상 을 사용 할 수 있 습 니 다:

var expenseday=document.getElementById('day-meal-expense');
 var typeOfDrink=expenseday.dataset.drink;
 console.log(typeOfDrink);//tea
 console.log(expenseday.dataset.food);//noodle
 console.log(expenseday.dataset.meal);//lunch
브 라 우 저가 dataset 를 지원 하면 설명 내용 이 팝 업 됩 니 다.브 라 우 저가 dataset 를 지원 하지 않 으 면 오류 가 발생 합 니 다.속성 drink/food/meal 의 값 을 가 져 올 수 없습니다.대상 은 null 또는 정의 되 지 않 았 습 니 다(예:IE9 버 전).
data 속성 은 기본적으로 모든 브 라 우 저 를 지원 하지만 dataset 대상 이 지원 하 는 것 은 비교적 특수 합 니 다.현재 Opera 11.1+,Chrome 9+에서 만 javascript 을 통 해 dataset 를 사용 하여 사용자 정의 data 속성 을 방문 할 수 있 습 니 다.다른 브 라 우 저,FireFox 6+(미 출)및 Safari 6+(미 출)는 dataset 대상 을 지원 합 니 다.IE 브 라 우 저 에 대해 서 는 아직 기약 이 없 는 추세 입 니 다.
질문:getAttribute 가 사용자 정의 속성 을 가 져 오지 않 았 습 니까?이 걸 왜?
답:전통 적 인 방법 으로 속성 치 를 얻 으 면 다음 과 유사 할 것 입 니 다:

var typeOfDrink=document.getElementById('day-meal-expense').getAttribute('data-drink');
이제 사용자 정의 속성 값 을 여러 개 얻 으 려 면 다음 N 줄 코드 로 이 루어 져 야 합 니 다.

var attrs=expenseday.attributes, expense={},i,j;
for (i=0,j=attrs.length;i<j;i++){
 if(attrs[i].name.substring(0,5)=='data-'){
 expense[attrs[i].name.substring(5)]=attrs[i].value;
 }
}
그리고 dataset 속성 을 사용 하면 우 리 는 원 하 는 값 을 얻 기 위해 순환 할 필요 가 없습니다.바로 죽 입 니 다.

expense=document.getElementById('day-meal-expense').dataset;
가:이 걸 어떻게 조작 해~
답:아래 와 같이 이름 을 조작 할 수 있 습 니 다.-값 은 다음 과 같 습 니 다.

charInput=[];
 for(var item in expenseday){
 charInput.push(expenseday[item]);
 }
모든 사용자 정의 속성 을 배열 에 넣 습 니 다.
만약 당신 이 data 속성 을 삭제 하고 싶다 면,이렇게 할 수 있 습 니 다:

delete expenseday.dataset.meal;
console.log(expenseday.dataset.meal)//undefined
만약 당신 이 원소 에 속성 을 추가 하고 싶다 면,이렇게 할 수 있 습 니 다:

expenseday.dataset.dessert='icecream';
console.log(expenseday.dataset.dessert);//icecream
dataset 는 전형 적 인 의미 의 JavaScript 대상 이 아니 라 DOMStringMap 대상 입 니 다.DOMStringMap 은 HTML 5 의 새로운 여러 개의 이름-값 이 맞 는 상호작용 변수 입 니 다.
다음 에 실제 애플 리 케 이 션 을 해 보도 록 하 겠 습 니 다.
(물론 사진 주 소 는 비어 있 을 것 이다.효 과 를 보고 싶 은 자신 이 그림 주 소 를 추가 하 세 요.이 효 과 는 그림 에 붙 여도 아무것도 보이 지 않 기 때문에 캡 처 를 하지 않 습 니 다)

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>      </title>
 <style>
 #box{
  width: 100%;
  height: 500px;
 }
 #box img{
  width: 100%;
  height: 500px;
  transition: 1s;
  opacity: 0;
 }
 </style>

</head>
<body>
 <div id="box"></div>
 <script type="text/javascript">
 var data=["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg"]
 var box=document.getElementById('box');
 // var img=document.createElement(img);
 for (var i = 0; i < data.length; i++) {
  var img=document.createElement('img');
  img.dataset.src=data[i];
  // img.style.opacity=1;
  box.appendChild(img);
  // console.log(box);
 }
 var imgs=document.querySelectorAll('img');
 window.addEventListener('scroll',loadFn);
 window.addEventListener('load',loadFn);
 function loadFn(){
  for (var i = 0; i < imgs.length; i++) {
  if(imgs[i].getBoundingClientRect().top<window.innerHeight){
   if(imgs[i].dataset.src){
   imgs[i].src=imgs[i].dataset.src;
   imgs[i].style.opacity=1;
   imgs[i].removeAttribute('data-src');
   }
  }
  }
 }
 </script>
</body>
</html>
이 는 dataset 의 사용 과 그림 지연 로 딩 을 바탕 으로 하 는 실현 방법 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기