2017-02-25 16 views
0

私のimgは3つの属性を持っていますが、1つの属性(data-web-src、,data-mobil-srcの場合のHTML属性の制御

please click to see on codepen

function noLazyImages(e) { 
 
    $(e + '.lazy_res').attr('src', function(_, oldSrc) { 
 
    var elData = $(this).data(), 
 
     winWidth = $(window).width(); 
 
    if (winWidth >= 768 && winWidth < 960) { 
 
     return elData['webSrc'] 
 
    } else if (winWidth < 768 && winWidth >= 480) { 
 
     return elData['tabletSrc'] 
 
    } else if (winWidth < 480) { 
 
     return elData['mobilSrc'] 
 
    } else if (winWidth > 960) { 
 
     return elData['webSrc'] 
 
    } 
 
    }) 
 
} 
 

 
$(document).ready(function() { 
 
    noLazyImages("body img"); 
 
})
img { 
 
    width: 300px; 
 
}
<img class="lazy_res" data-web-src="http://image.prntscr.com/image/bdf1d94b64104ef2acd2ceee19882cd1.jpg" data-mobil-src="http://image.prntscr.com/image/caa51ab4900448589201207e57b2630f.jpg" data-tablet-src="http://image.prntscr.com/image/4b2862a292b543139daa7805a58c17fd.jpg" 
 
/> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

私は私はあなたの質問から理解何からの回答を掲載。今、あなたはその質問を編集しました。あなたが本当にやろうとしていることを理解することはより明確ではありません。質問をより明確にすることはできますか? – vatz88

+0

私のimgは3つの属性を持ち、srcの値は空です。デスクトップ上にある 'data-web-src'の値を取得してsrcに設定しますが、' data-web -tablet'を設定してsrcを設定しますが、私のimgにはデスクトップやタブレット、モバイルの両方で使用する属性(例えば、 'data-web-src'など) –

+0

あなたはこのコメントでとてもうまく説明しました!私は同様の質問にこの説明を追加して、他の人が同じような答えを探している方が簡単であるようにお勧めします:) – vatz88

答えて

2

私は、次のコードは、あなたがやりたいと思います。

質問スニペットにあるimgタグからdata-tablet-srcを削除しました。これにより、両方を実行して結果を比較できるようになりました。

ロジック

if(elData['tabletSrc'])elData['tabletSrc']が存在しない場合はfalseになります。だから代わりにreturn elData['webSrc']を返します。

function noLazyImages(e) { 
 
    $(e + '.lazy_res').attr('src', function(_, oldSrc) { 
 
    var elData = $(this).data(), 
 
     winWidth = $(window).width(); 
 
    if (winWidth < 768 && winWidth >= 480) { 
 
    \t if(elData['tabletSrc']){ 
 
     \t return elData['tabletSrc']; 
 
     } 
 
    } else if (winWidth < 480) { 
 
     if(elData['mobilSrc']){ 
 
     \t return elData['mobilSrc']; 
 
     } 
 
    } 
 
    return elData['webSrc']; 
 
    }); 
 
} 
 

 
$(document).ready(function() { 
 
    noLazyImages("body img"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<img class="lazy_res" data-web-src="http://image.prntscr.com/image/bdf1d94b64104ef2acd2ceee19882cd1.jpg" data-mobil-src="http://image.prntscr.com/image/caa51ab4900448589201207e57b2630f.jpg" 
 
/>

+0

それは素晴らしい仕事であり、ありがとうございます。 –

1

あなただけのイベントのサイズを変更するウィンドウにリスナーを追加する必要があなたのスクリプトの作業罰金:

$(document).ready(function() { 
    noLazyImages("body img"); // on Document ready 

    $(window).resize(function() { 
    noLazyImages("body img"); // on window Resize 
    }); 

}) 
+0

私はdocument.readyで削除する必要がありますか? window.resizeで十分ですか? –

+0

いいえ、現在のビューポートの幅に適切な画像を設定するには、この機能を一度起動する必要があります。ウィンドウのサイズ変更イベントのためにイメージが変更されるようにイベントをアタッチします。 – Cuzi

関連する問題