Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][CSS]Cropper.js, wypełnianie diva wycentrowanym obrazkiem
stellatus
post
Post #1





Grupa: Zarejestrowani
Postów: 196
Pomógł: 0
Dołączył: 9.03.2017

Ostrzeżenie: (0%)
-----


Zmodyfikowałem przykład z biblioteki cropper.js (https://fengyuanchen.github.io/cropperjs/).

Wersja oryginalna przykładu:https://fengyuanchen.github.io/cropperjs/examples/fixed-crop-box.html

Wersja moja: https://codepen.io/reti/pen/ExmyyaX

Chciałbym, aby te zdjęcia, po załadowaniu wypełniły swoje divy, ale tak żeby były wycentrowane wertykalnie i horyzontalnie, przy czym:
- jeżeli obraz ma orientację horyzontalną, to jego wysokość nie może być większa od diva
- jeżeli obraz ma orientację wertykalną, to jego szerokość nie może być większa od diva.

Dokładnie tak jak tutaj: https://ibb.co/Twqxy2h

Jak to zrobić? Próbuję na różne sposoby i już skończyły mi się pomysły.

Problem dokładnie taki sam jak w tym poście: Temat: JavaScriptCSSwypelnianie diva wycentrowanym obrazkiem tylko biblioteka inna.
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Próbowałeś ustawić max-width oraz max-height:100% dla .cropper-container img ?
Trzeba nadpisać wartości, które są w cropper.css dla tego selektora.
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #3





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


dla lwa masz

  1. width: 300px;
  2. height: 225px;
  3. transform: translateY(37.5px);


jeśli podmienisz na poniższy kod będziesz miał docelowy efekt

  1. transform: translateX(-50%);
  2. margin-left: 50%;
  3. width: auto;
Go to the top of the page
+Quote Post
stellatus
post
Post #4





Grupa: Zarejestrowani
Postów: 196
Pomógł: 0
Dołączył: 9.03.2017

Ostrzeżenie: (0%)
-----


@trueblue Dzięki, ale niestety nie działa: https://drive.google.com/file/d/1kQ8tQQZOKr...iew?usp=sharing

Chyba przez CSS się tego nie da zrobić. Myślę, żeby pokombinować jakoś z metodami:
- zoom(), tzn. powiększać obrazek w zależności od tego ile brakuje do 300px
- zoomTo(), tzn. pomniejszać obrazek w zależności od procentowej różnicy pomiędzy oryginałem a obrazkiem pomniejszonym.

Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


width oraz height bym na chwilę wyłączył z CSS.
Go to the top of the page
+Quote Post
stellatus
post
Post #6





Grupa: Zarejestrowani
Postów: 196
Pomógł: 0
Dołączył: 9.03.2017

Ostrzeżenie: (0%)
-----


@LowiczakPL Dzieki, niestety także nie działa: https://drive.google.com/file/d/1Etu-yks56U...iew?usp=sharing

Zastosuję zoomTo(). W wypadku obrazka poziomego docelowa wysokość to 300px. Te 300px dzielę przez oryginalną wysokość i otrzymuję proporcję, którą wpisuję do zoomTo. W wypadku obrazka pionowego docelowa szerokość to 300px. Te 300px dzielę przez oryginalną szerokość i otrzymuję proporcję, którą wpisuję do zoomTo.

Teraz tylko trzeba napisać odpowiednią funkcję. Ma to sens?

@trueblue

"width oraz height bym na chwilę wyłączył z CSS."

efekt jest taki:
https://drive.google.com/file/d/1BOMCyei5dY...iew?usp=sharing

Ale problem chyba udało mi się rozwiązać:

Kod
function fillCropContainer() {
      var instanceArray = [cropper1, cropper2]
      var ratio
      instanceArray.forEach((el) => {
        var imgNatHeight = el.imageData.naturalHeight
        var imgNatWidth = el.imageData.naturalWidth
        if (imgNatHeight < imgNatWidth) {
          ratio = 300 / imgNatHeight
          el.zoomTo(ratio)
        } else {
          ratio = 300 / imgNatWidth
          el.zoomTo(ratio)
        }
      })
    }


Muszę to jeszcze potestować.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 09:33