🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #51292

Re: Jak sprawdzić czy plik graficzny istnieje (JS+jquery)

#51292
From: Cezary Tomczyk
Date: Sat, 20 Apr 2013 15:04
67 lines
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-mail
References: <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