Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Mały problem z html i css.

09.09.2013 14:27
Paul12
1
Paul12
135
Buja
Image

Mały problem z html i css.

Mam taką strukturę:
<div class="album"> // to jest container z atrybutem display: table, wycentrowany przez margin: 0 auto.

//3 divy z ‹float: left›

<a href="link do poprzedniej foty"><div class="prev"></div></a>
<div class="imagebrowser"> //tutaj kod php ładuje mi fotkę </div>
<a href="link do następnej fory"><div class="next"></div></a>

</div>

Fotka ma rozdzielczość 800x533 lub 533x800 + ramka 10px, w containerze jest 900px miejsca na to. Divy "prev" i "next" zawsze mają wysokość 553px, szerokość 30px i tło z atrybutem no-repeat, które wyświetla strzałkę. Tło ma opacity mniejsze niż 1.0 i po najechaniu na link (czyli cały div) opacity się zwiękasza, przez co strzałka (tło to czarna strzałka na przezroczystym tle) robi się ciemniejsza.

Problem: Chciałbym, żeby linki prev i next były aktywne po najechaniu na zdjęcie kursorem. 50% powierzchni z lewej aktywuje linka do poprzedniej foty, 50% powierzchni z prawej aktywuje linka do następnej foty. Jednocześnie odpowiednia strzałka musi się przyciemnić, żeby użytkownik był świadomy tego, że kliknięcie załaduje poprzednią lub następną fotkę. Żeby to zobrazować wrzucam screena jak to teraz wygląda. Kursorem najechałem na ten mały obszar 533x30 po prawej stronie od zdjęcia. Dodatkowym utrudnieniem jest fakt, że fotki mają różną szerokość - albo 533px, albo 800px, więc nie można wypozycjonować strzałek na stałe, chciałbym żeby zawsze były blisko zdjęcia.

09.09.2013 14:36
Andruskill
2
odpowiedz
Andruskill
66
Megajebutron

2 przeźroczyste obiekty mające atrybut onChange mające po 50% do tego funkcja js zmieniająca strzalki z jasnych na ciemne. Obrazki lepiej by dać w solidny kontenerek i skalowanie do niego żeby fotki nie rozwalały ułożenia. Choć w sumie trzeba użycie stałych ograniczać jak diabli.

09.09.2013 14:59
3
odpowiedz
zanonimizowany165753
4
Generał

Paul12,

Post z 2 to dobra rada. Pobierz szerokość zdjęcia, podziel na dwa (zaokrąglanie w dół) i usytuuj "niewidzialne" divy na obrazku. Pod każdy podepnij akcję zmiany zdjęcia (zgaduję, że przerabiasz jakiegoś lightboxa) i użyj jquery do zmiany cssów strzałek.

13.09.2013 12:34
Paul12
4
odpowiedz
Paul12
135
Buja
Image

Naskrobaliśmy z kumplem coś takiego. Skrypt rysuje dwa prostokątne divy na zdjęciu niezależnie od jego wymiarów. Ale dalej jest problem z wsadzeniem linka i podświetleniem strzałki po najechaniu na te prostokąty.

<script type="text/javascript">
function imagebrowserOnload( ) ‹;

container = jQuery('.ngg-imagebrowser');

containerWidth = container.width();
containerHeight = container.height();

console.log(containerWidth);

lewePole = jQuery('.lewe-pole');
prawePole = jQuery('.prawe-pole');

lewePole.width(containerWidth/2).height(containerHeight);
prawePole.width(containerWidth/2).height(containerHeight).css('left', containerWidth/2);

poprzednie = jQuery('.poprzednie');

// działa wyświetlanie 'lewo', 'prawo' w konsoli, ale nie chce działać to poprzednie.addClass('active'), nie wiem dlaczego

lewePole.mouseover(
function () ‹;
console.log("lewo");

›;);

prawePole.mouseover(
function () ‹;
console.log("prawo");

›;);
›;
</script>

edit: forum zamienia klamerki na < >

13.09.2013 14:31
Paul12
5
odpowiedz
Paul12
135
Buja

prawePole.click(
function () ‹;
window.location.replace("adres");
›;);

Klikanie prostokąta i przejście do następnej fotki jest proste, ale... co jeśli linki te generowane są przez php? Jak je wkleić do funkcji?

<?php echo $image->next_image_link ?>#main

edit: jeżeli nie da się odpalić w ten sposób funkcji to muszę wczytać adres z linka, który już jest na stronie i ma swoje id. Jak?

14.09.2013 00:00
Paul12
6
odpowiedz
Paul12
135
Buja

Gotowe! Niestety w js/jquery jestem kompletnym świeżakiem i wyszła mi trochę ściana kodu. Nie da się tego jakoś skrócić?

<script type="text/javascript">
function imagebrowserOnload( ) ‹;

container = jQuery('.ngg-imagebrowser');

containerWidth = container.width();
containerHeight = container.height();

lewePole = jQuery('.lewe-pole');
prawePole = jQuery('.prawe-pole');

lewePole.width(containerWidth/2).height(containerHeight);
prawePole.width(containerWidth/2).height(containerHeight).css('left', containerWidth/2);

poprzednie = jQuery('.poprzednie');
nastepne = jQuery('.nastepne');

poprzednie.height(containerHeight);
nastepne.height(containerHeight);

lewePole.mouseenter(
function () ‹;
poprzednie.attr("style","opacity: 0.6");
poprzednie.height(containerHeight);
›;);
lewePole.mouseleave(
function () ‹;
poprzednie.attr("style","opacity: 0.3");
poprzednie.height(containerHeight);
›;);

prawePole.mouseenter(
function () ‹;
nastepne.attr("style","opacity: 0.6");
nastepne.height(containerHeight);
›;);
prawePole.mouseleave(
function () ‹;
nastepne.attr("style","opacity: 0.3");
nastepne.height(containerHeight);
›;);

poprzednie.mouseenter(
function () ‹;
poprzednie.attr("style","opacity: 0.6");
poprzednie.height(containerHeight);
›;);
poprzednie.mouseleave(
function () ‹;
poprzednie.attr("style","opacity: 0.3");
poprzednie.height(containerHeight);
›;);

nastepne.mouseenter(
function () ‹;
nastepne.attr("style","opacity: 0.6");
nastepne.height(containerHeight);
›;);
nastepne.mouseleave(
function () ‹;
nastepne.attr("style","opacity: 0.3");
nastepne.height(containerHeight);
›;);

lewePole.click(
function () ‹;
link = jQuery('.poprzednie').parent();
window.location.replace( link.attr( "href" ) );
›;
);
prawePole.click(
function () ‹;
link = jQuery('.nastepne').parent();
window.location.replace( link.attr( "href" ) );
›;
);


›;
</script>

14.09.2013 00:06
Arxel
👍
7
odpowiedz
Arxel
220
Kostka Rubika

Tez dopiero zaczynam naukę jQuery (a muszę na poniedziałek do pracy zrobić niezły kosmos, zobaczymy jak to będzie), ale pierwsze co mi przychodzi to może być ustawiał akcje kliknięcia lub innej akcji na div-a, a wewnątrz sprawdzał warunek, który dokładnie div został kliknięty/najechany? Powinno to skrócić trochę kod.. Aczkolwiek nie wiem czy nie plotę bez sensu, bo jak już wspomniałem, sam się ostro dopiero zacząłem przyuczać.. :-)

Od siebie proponuję zapoznać się z HTML5 + CSS3, można robić nieziemskie cuda własnie na samych CSS!

Proszę: http://codepen.io/AMKohn/pen/EKJHf

Forum: Mały problem z html i css.