← Alle Beiträge

Leitfäden

Bild-Hover-Zoom- und Schnell-Download-Regeln

Bilder sind die andere Hälfte der Kontrolle über Medien. Diese Anleitung sammelt drei JustZix-Regeln für die Arbeit mit Bildern: Zoom beim Überfahren, sofortiges Laden, damit nichts leer bleibt, und eine Schnell-Download-Schaltfläche, die Same-Origin-Regeln respektiert.

Beim Überfahren zoomen, nur mit CSS

Die einfachste Verbesserung braucht überhaupt kein JavaScript. Eine CSS-Transformation skaliert ein Bild, wenn Sie es überfahren, was genug ist, um feine Details zu lesen, ohne eine Lightbox zu öffnen.

img {
  transition: transform .18s ease;
}

img:hover {
  transform: scale(1.6);
  position: relative;
  z-index: 2147483647;
}

Mit transform zu skalieren hält das Layout stabil, weil das Bild immer noch seinen ursprünglichen Kasten einnimmt. Der hohe z-index beim Überfahren bedeutet, dass das vergrößerte Bild über benachbartem Inhalt schwebt, statt abgeschnitten zu werden.

Eine präzise Lupe mit JavaScript

Für detaillierte Bilder schlägt eine dem Cursor folgende Lupe eine flache Skalierung. Diese Regel verfolgt den Zeiger und verschiebt den Transformationsursprung des Bildes auf die Stelle unter dem Cursor.

(function () {
  document.addEventListener('pointermove', function (e) {
    var img = e.target;
    if (!img || img.tagName !== 'IMG') { return; }
    var r = img.getBoundingClientRect();
    var x = ((e.clientX - r.left) / r.width) * 100;
    var y = ((e.clientY - r.top) / r.height) * 100;
    img.style.transformOrigin = x + '% ' + y + '%';
  }, true);
  document.addEventListener('pointerenter', function (e) {
    if (e.target && e.target.tagName === 'IMG') {
      e.target.style.transform = 'scale(2.4)';
      e.target.style.transition = 'transform .12s';
    }
  }, true);
  document.addEventListener('pointerleave', function (e) {
    if (e.target && e.target.tagName === 'IMG') {
      e.target.style.transform = '';
    }
  }, true);
})();

Die Lupe zoomt dorthin, wo der Cursor ist, sodass das Schwenken über ein großes Bild natürlich wirkt. Das Zurücksetzen von transform bei pointerleave bringt das Bild zur Normalgröße zurück.

Jedes Bild zum Laden zwingen

Verzögertes Laden ist gut für die Bandbreite, aber ärgerlich, wenn Sie eine ganze Galerie lesen oder speichern wollen und die Hälfte davon noch leer ist. Diese Regel schaltet verzögerte Bilder auf sofort und stupst langsame zum Laden an.

document.querySelectorAll('img[loading="lazy"]').forEach(function (img) {
  img.loading = 'eager';
  if (img.dataset.src && !img.src) {
    img.src = img.dataset.src;
  }
  if (img.dataset.srcset && !img.srcset) {
    img.srcset = img.dataset.srcset;
  }
});

Viele Seiten verstecken die echte URL in einem data-src-Attribut und kopieren sie erst zu src, wenn das Bild ins Sichtfeld scrollt. Sie selbst zu kopieren erzwingt das sofortige Laden. Dieselbe Idee funktioniert für srcset.

Eine Ein-Klick-Download-Schaltfläche

Diese Regel fügt jedem Bild eine kleine Download-Schaltfläche in die Ecke hinzu, wenn Sie es überfahren. Sie verwendet das Standard-download-Attribut auf einem Anker, das den Browser bittet, die Datei zu speichern.

(function () {
  document.addEventListener('pointerenter', function (e) {
    var img = e.target;
    if (!img || img.tagName !== 'IMG' || img._dl) { return; }
    img._dl = true;
    var a = document.createElement('a');
    a.textContent = 'Speichern';
    a.href = img.currentSrc || img.src;
    a.download = '';
    a.style.cssText = 'position:absolute;z-index:2147483647;'
      + 'background:#111;color:#fff;font:600 11px sans-serif;'
      + 'padding:3px 7px;border-radius:5px;text-decoration:none';
    var r = img.getBoundingClientRect();
    a.style.left = (r.left + window.scrollX + 4) + 'px';
    a.style.top = (r.top + window.scrollY + 4) + 'px';
    document.body.appendChild(a);
    img.addEventListener('pointerleave', function () {
      a.remove();
      img._dl = false;
    }, { once: true });
  }, true);
})();

Das download-Attribut funktioniert sauber für Same-Origin-Bilder. Bei Cross-Origin-Bildern öffnet der Browser die Datei vielleicht in einem neuen Tab, statt sie zu speichern, was erwartetes Verhalten ist und nichts, das eine Regel zu besiegen versuchen sollte. currentSrc zu verwenden wählt die Auflösung, die der Browser tatsächlich aus einem responsiven srcset gewählt hat.

Es zusammensetzen

Alle drei sind in unseren fertigen Beispielen verfügbar, oder laden Sie JustZix herunter und bauen Sie Ihre eigenen. Für die Videoseite der Mediensteuerung beginnen Sie mit native Steuerungen auf jedem Video erzwingen.

Bewerte diesen Beitrag

Noch keine Bewertungen — sei der Erste.

Probiere es selbst aus

Installiere JustZix und füge ein beliebiges Snippet aus diesem Artikel ein. Zwei Minuten von null bis zu einer funktionierenden Regel auf allen deinen Geräten.

JustZix holen

Funktionen · So funktioniert es · Beispiele · Anwendungsfälle