🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
3 messages
3 total messages Started by Latet Sat, 20 Apr 2013 11:14
Jak sprawdzić czy plik graficzny istnieje (JS+jquery)
#51291
Author: Latet
Date: Sat, 20 Apr 2013 11:14
37 lines
2416 bytes
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>

Dziękuję,

latet 
Re: Jak sprawdzić czy plik graficzny istnieje (JS+jquery)
#51292
Author: 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/
Re: Jak sprawdzić czy plik graficzny istnieje (JS+jquery)
#51293
Author: Latet
Date: Sat, 20 Apr 2013 19:57
8 lines
1412 bytes
Dzięki, znalazłem tez inne rozwiązanie problemu, chyba bardziej "naturalne" i 
eleganckie:
http://www.kylejlarson.com/blog/2012/creating-retina-images-for-your-website/
(rodział: JavaScript for Retina Image Replacement).

Pozdrawiam,

latet
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads