Article View: pl.comp.lang.javascript
Article #51292Re: Jak sprawdzić czy plik graficzny istnieje (JS+jquery)
From: Cezary Tomczyk
Date: Sat, 20 Apr 2013 15:04
Date: Sat, 20 Apr 2013 15:04
67 lines
3368 bytes
3368 bytes
On 2013-04-20 13:14, Latet wrote:
> Witam,
>
> Testuję sobie taki sprytny skrypcik znaleziony w sieci, który w
> przypadku rozpoznania iPada z wyświetlaczem retina podmienia wszystkie
> obrazki na stronie na wersje w wyższej rozdzielczości (o ile są na
> serwerze i mają nazwę zgodną ze schematem: obraznormalny.jpg -->
> obraznormalnyretina.jpg).
>
> Problem tylko w tym, że jeśli takowego pliku (z dopiskiem "retina" w
> nazwie) nie ma, to nazwa źródła obrazka nadal jest zmieniana, co się
> kończy brakiem obrazka na ekranie i wyświetleniem w tym miejscu tekstu z
> tagu ALT.
>
> Jak zmienić poniższy skrypt, aby robił to co robi TYLKO pod warunkiem,
> że plik hi-res o oczekwianej nazwie faktycznie istnieje, a w przeciwnym
> wypadku pozostawiał taki obrazek, jaki był pierwotnie w spokoju?
>
> <script type="text/javascript">
> $(document).ready(function()
> {
> var pixelRatio = window.devicePixelRatio ? window.devicePixelRatio : 1;
> images = document.getElementsByTagName("img"),
> num = images.length;
> if (navigator.userAgent.indexOf('iPad') >= 0 && pixelRatio >= 2 )
> {
> for(i=0;i<=num-1;i++)
> {
> var temp = images[i].attributes['src'].value,
> src = temp.substr(0,temp.lastIndexOf('.')) + 'retina' +
> temp.substr(temp.lastIndexOf('.'));
> images[i].src = src;
> }
> }
> });
> </script>
$(document).ready(function() {
var pixelRatio = window.devicePixelRatio ? window.devicePixelRatio : 1,
images = document.images,
num = images.length,
iPad = navigator.userAgent.indexOf('iPad'),
temp, src;
// <img src="..." data-imagesrc="" />
if (iPad >= 0 && pixelRatio >= 2) {
for ( var i = 0; i < num; i += 1) {
temp = images[i].attributes['src'].value;
src = temp.substr(0, temp.lastIndexOf('.')) + 'retina' +
temp.substr(temp.lastIndexOf('.'));
(function (img, s) {
img.onerror = function () {
this.src = this.getAttribute('data-imagesrc');
};
img.src = s;
})(images[i], src);
}
}
});
W atrybucie "data-imagesrc" podstawiasz źródło obrazka który chcesz, by
był pobrany w razie gdy "oryginał" nie istnieje.
--
Cezary Tomczyk
http://www.ctomczyk.pl/
Technical Details
Message-ID:
<kkuaql$l7d$1@portraits.wsisiz.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!wsisiz.edu.pl!.POSTED!not-for-mailReferences:
<51727890$0$1220$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!wsisiz.edu.pl!.POSTED!not-for-mail From: Cezary Tomczyk <cezary.tomczyk@gmail.com> Newsgroups: pl.comp.lang.javascript Subject: Re: Jak sprawdzić czy plik graficzny istnieje (JS+jquery) Date: Sat, 20 Apr 2013 17:04:58 +0200 Organization: http://www.wit.edu.pl Lines: 67 Message-ID: <kkuaql$l7d$1@portraits.wsisiz.edu.pl> References: <51727890$0$1220$65785112@news.neostrada.pl> NNTP-Posting-Host: ip-79-175-206-128.cable.smsnet.pl Mime-Version: 1.0 X-Trace: portraits.wsisiz.edu.pl 1366470293 21741 79.175.206.128 (20 Apr 2013 15:04:53 GMT) X-Complaints-To: abuse@wsisiz.edu.pl NNTP-Posting-Date: Sat, 20 Apr 2013 15:04:53 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 In-Reply-To: <51727890$0$1220$65785112@news.neostrada.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit