Dopasowywanie obrazków - galleria

Dopasowywanie obrazków - galleria
SH
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 8 lat
  • Postów:51
0

Witam.
Brakuje mi pomysłu jak dynamicznie skalować obrazki aby osiągnąć efekt takiej oto galerii:
user image
Obrazki mogą być różnych formatów, różnych rozmiarów i zawsze muszą być wyświetlane po kolei.
Dodatkowo cała galeria musi być responsywna.
Ma ktoś jakiś pomysł? Aplikację piszę w ASP.NET MVC4.

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:4 dni
  • Lokalizacja:Rzeszów
0

javascript.
szukaj za "responsive gallery" w końcu znajdziesz, ja trafiłem na to: http://www.ryanepp.com/demos/balanced_gallery/horizontal

wady ma takie, że:

  • nie ma preloadowania, galeria układa się dopiero po załadowaniu obrazków (zamiast preloadowania może być odbieranie z serwera wymiarów obrazków (serwer musi mieć je w bazie, ew. czytać na bieżąco i podawać z obrazkiem))
  • na maksymalnej rozdzielczości na Operze coś się rozjechało - raczej wina skryptu niż Opery, bo widać, że autor gdzieś coś gubi (bo nie zawsze obrazki są wyrównane idealnie do prawej) i to samo powtórzyłoby się na ff w idealnie takim samym wymiarze okna.

więc szukaj innego.

tumblr bodajże i google images wyświetlają zdjęcia w takiej formie, może u nich coś da się podpatrzeć.


P7
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:16
1

Nadaj wartości procentowe dla zaprezentowanej siatki div-ów, a do środka powrzucaj obrazki w tagu img
Ukryj overflow dla div, a obrazki dopasuj do div-a

Możesz nadać każdemu "rodzajowi" wielkości własną klasę, a jeszcze lepiej pogrupować je wg linii w pewne schematy. Łatwiej nimi zarządzisz, przy różnych rozdzielczościach.

Kopiuj
<div class="images-1-2-1">
   <div>
      <img titile="obrazek1" alt="obrazek1" src="./obrazek1">
   </div>
   <div>
      <img titile="obrazekduzy" alt="obrazekduzy" src="./obrazekduzy">
   </div>
   <div>
      <img titile="obrazek3" alt="obrazek3" src="./obrazek3">
   </div>
</div>

Koduj, kompiluj, psuj i naprawiaj.
SH
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 8 lat
  • Postów:51
0

@dzek69 Chciałem jak najbardziej ograniczyć JavaScript (jedynie do ładowania kolejnych partii obrazków). Jak podglądałem Tumblr'a, Google Images, i Eyeem to jedyna komunikacja z serverem polega na wysłaniu żądania o kolejne wiersze.
~edit
Chodzi mi o skalowanie obrazków po stronie serwera (bo przesyłanie wielkich obrazków i skalowanie ich po stronie przeglądarki raczej zdecydowanie nie będzie wydajne). Mam gotowy algorytm do skalowania galerii na telefonach ale nie wiem jak to przenieść na stronę i w dodatku responsywną.

@pitu7dg Tylko problem jest tego typu, że obrazki mogą być w skrajnie różnych formatach (480x800, 950x2000 itd.) i nieokreśloną ilość 'rodzajów' wielkości. Jeśli oddam skalowanie %-om to mam pewność, że na brzegach nie będzie pustych miejsc? Bo wydaje mi się, że tak właśnie się stanie.

edytowany 1x, ostatnio: Sharbat
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:4 dni
  • Lokalizacja:Rzeszów
1

@Sharbat: Takiej galerii nie stworzysz idealnej bez kadrowania (wszystkie tego typu galerie kadrują obrazy). Kadrowanie przez css i overflow (czy tam background-size). tak samo jak nie zrobisz responsywnej galerii bez przeskalowywania obrazków po stronie przeglądarki (wiadomo, że możesz je pomniejszyć i potem skalować, zamiast skalować obrazy 4k) - możesz to ograniczyć, ale raczej nie wyeliminować ;)

Jeżeli tak czy siak korzystasz z javascriptu - to nie ograniczaj się szczególnie, jeżeli nie masz szczególnych powodów. To przeglądarka jest od renderowania - więc nie zrzucaj renderowania na serwer. Szczególnie responsywne strony.


SH
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 8 lat
  • Postów:51
0

Okej, czyli rozumiem, że muszę:

  1. Ustawić rozmiar głównego DIV'a galerii na rozmiar %-owy.
  2. Pobrać aktualny rozmiar tego DIV'a przez JS'a.
  3. Określić maksymalną wysokość jednego wiersza.
  4. Składać jeden wiersz dodając kolejne obrazki i skalować je do zadanej wysokości.
  5. Jeśli dodany (ostatni w wierszu) obrazek wychodzi poza długość wiersza to skaluje wszystkie obrazki proporcjonalnie żeby wypełniły cały wiersz (skalowanie w dół jeśli chciałbym dokoptować ten ostatni obrazek do aktualnego wiersza lub w górę jeśli ostatni obrazek ma znaleźć się w wierszu kolejnym).

A jak rozwiązać to, żeby nie ładowały mi się najpierw w jednej linii? Ukryć całość (display: none), załadować, przeskalować i odkryć (display: block)? Czy jest jakiś optymalniejszy sposób?
~edit
Mogę ewentualnie ładować całą listę SRC'ków i ich rozmiary do tablicy w JS'ie i przeskalowane dodawać (append) do treści strony (?)

edytowany 2x, ostatnio: Sharbat
dzek69
Jeżeli możesz dokonywać obliczeń na elementach przed wstawieniem ich do dokumentu to tak rób
SH
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 8 lat
  • Postów:51
0

Mam jeszcze jedno pytanie z ładowaniem galerii.
Po 1. jak wykryć kiedy scroll dojeżdża do końca ekranu.
Po 2. jak dodawać nowe elementu które zwróci mi Ajax.
Główne wątpliwości mam z powodu Ajax'a i ASP.NET'a ponieważ obrazki są wyświetlane za pomocą kontrolera w taki sposób:

Kopiuj
<img src="/App/Images/ShowSingleImage/193" class="single_image" real-height="1023" real-width="828" id="single-img_193" style="width: 202.261px; height: 249.895px;">

Pierwszy człon linka ("/App") to 'Virtual Directory' stworzone przez Visual Studio żeby można było łączyć się z projektem po sieci wewnętrznej i nie będzie tego na serwerze produkcyjnym.
Kolejno załadowane obrazki dodaje w taki sposób:

Kopiuj
var img = document.createElement("img");
    img.setAttribute("src", "/App/Images/ShowSingleImage/"+response.data.id);
    $("#user-gallery").append(img);

Jak zmodyfikować 'src' żebym mógł pominąć "/App"?

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:4 dni
  • Lokalizacja:Rzeszów
1
  1. jquery waypoints (raczej nie chcesz do samego końca ekranu, tylko do 2-3 elementów od końca)

Jak zmodyfikować 'src' żebym mógł pominąć "/App"?

po prostu zapisz sobie gdzieś zmienną, zawierającą "ścieżkę do korzenia", a potem doklejaj ją na początku.


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)