datasetに基づく使用と画像の遅延負荷の実現方法
まず、javascriptのdataset属性について紹介します。
httml 5では、data-プレフィクスを使用して、データの保存を行います。
以下は元素適用data属性の一例である。
data属性は基本的にすべてのブラウザがサポートされていますが、datasetオブジェクトがサポートしているのは特殊です。現在はOpera 11.1+、Chrome 9+の下でjavascriptを通じて、datasetを使ってカスタマイズしたdata属性にアクセスできます。他のブラウザについては、FireFox 6+(未出)およびSafari 6+(未出)はdatasetオブジェクトをサポートします。
カスタム属性を取得するためにget Attributeがあるのではないですか?これは何ですか?
従来の方法で属性値を取得すると以下のようになるはずです。
答:以下のように操作できます。
ダタ属性を削除したいなら、こうしてもいいです。
実用的な応用をしてみましょう。
(もちろん写真の住所はきっと空いています。効果を見たい自分はピクチャーの住所をプラスして、この効果はピクチャーを付け加えても何も見えないので、スクリーンショットに行きません)
httml 5では、data-プレフィクスを使用して、データの保存を行います。
以下は元素適用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または未定義(IE 9バージョンなど)です。data属性は基本的にすべてのブラウザがサポートされていますが、datasetオブジェクトがサポートしているのは特殊です。現在はOpera 11.1+、Chrome 9+の下でjavascriptを通じて、datasetを使ってカスタマイズしたdata属性にアクセスできます。他のブラウザについては、FireFox 6+(未出)およびSafari 6+(未出)はdatasetオブジェクトをサポートします。
カスタム属性を取得するためにget Attributeがあるのではないですか?これは何ですか?
従来の方法で属性値を取得すると以下のようになるはずです。
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]);
}
すべてのカスタム属性を1つの配列にセットします。ダタ属性を削除したいなら、こうしてもいいです。
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の使用と画像の遅延に基づいてロードされたこの実装方法は、小編集が皆さんに提供しているすべての内容です。