script scherm resolutie

Status
Niet open voor verdere reacties.

Frenske123

Terugkerende gebruiker
Lid geworden
2 jul 2007
Berichten
1.267
Hoi ,

Iemand bekend met een scriptje voor scherm resoluties?

ik wil dit gebruiken in een statement

als resolutie breder is dan xx include bestand <?php include("bestand.php");?>

Ik heb al wat afgezocht maar zonder resultaat
 
Wat bevat het geïnclude bestand? Als dit enkel opmaak is kun je denk ik beter gebruik maken van CSS media-queries
 
PHP weet niet wat voor resolutie een bezoeker heeft. Afhankelijk van wat je doel is kun je Javascript of CSS gebruiken.
 
@Tha devil , ik wil een bestand includen eventueel html met php aan CSS media-queries heb ik nou niet veel , al zal ik dat wel in toekomst gaan doen


Naarling , ik heb javascript;

Code:
<script type="text/javascript"><!--

if (screen.width <= 1023) {
document.location = "test.html";
}

if (screen.width > 1024) {
	
document.write xxxxx;
}

//--></script>

alleen waar : document.write xxxxx; staat wil ik een bestand includen dat php bevat, een en ander geprobeerd met o,a src="test.js

maar kom niet verder
 
Hoi Frenske,
Als je javascript gaat toepassen (document.write of iets anders), is de pagina al gedownload en bij de bezoeker: javascript is client-side. Daarna kunnen er geen server-side veranderingen gemaakt worden! Want een php-include wordt geïncludeerd vóórdat de pagina richting bezoeker gaat.

Maar gaat het niet als je de include gewoon buiten het script plaatst?
Dan krijg je een pagina inclusief de include, maar door het script is die pagina niet te zien bij een breedte <=1023: dan wordt overgewipt naar de smal.htm.
HTML:
<script type="text/javascript"><!--
if (screen.width <= 1023) {
    document.location = "smal.htm";
}
//--></script>
<?php include("includes/breed.htm"); ?>
Wat je (behalve media-queries) ook zou kunnen doen, is via de javascript-breedtemeting een aanvullend/alternatief stylesheet laten inladen. Dan hoef je per webpagina geen twee aparte pagina's te maken. :)
 
Hoi Frenske,
Als je javascript gaat toepassen (document.write of iets anders), is de pagina al gedownload en bij de bezoeker: javascript is client-side. Daarna kunnen er geen server-side veranderingen gemaakt worden! Want een php-include wordt geïncludeerd vóórdat de pagina richting bezoeker gaat.
duidelijk
Maar gaat het niet als je de include gewoon buiten het script plaatst?
Dan krijg je een pagina inclusief de include, maar door het script is die pagina niet te zien bij een breedte <=1023: dan wordt overgewipt naar de smal.htm.
HTML:
<script type="text/javascript"><!--
if (screen.width <= 1023) {
    document.location = "smal.htm";
}
//--></script>
<?php include("includes/breed.htm"); ?>
Ik wil eigenlijk een klein stukje code met html en php invoegen, verder begrijp ik wat je bedoelt hierboven , maar dan zijn het zoals je zegt 2 pagina's , dan zal ik de php moeten laten vervallen.

Mod-edit: In plaats van zinnen in een andere kleur tussen een quote heen plaatsen is het overzichtelijker om de quote op te delen
 
Laatst bewerkt door een moderator:
Ah, uit je scriptje begreep ik dat je 'm altijd wilde redirecten bij een smalle breedte.
Maar als dat niet zo is, dan kan je ook omgekeerd gaan denken: niet iets erbij als het een brede pagina is, maar iets er af als het een smalle pagina is.
Dat zou bv. zo kunnen:
HTML:
<body>
...
spul voor alle breedtes
...
<div id="alleenvoorbreed">
    <img src="images/mooiOpvulPlaatjeVoorBredeSchermen.png" with="250" height="100" alt="" />
    enz.
</div>
...
vervolg alle breedtes
...
<script type="text/javascript">
//<![CDATA[
    if (screen.width <= 1023) {
        document.getElementById('alleenvoorbreed').style.display="none";
    }
//]]>
</script>
</body>
</html>
  • De <div id="alleenvoorbreed"> kan er desgewenst als php-include in gezet worden (bv. als het een hele lap is die op verschillende pagina's moet terugkomen).
  • Het javascript op het eind: anders is de id="alleenvoorbreed" er nog niet in de html-code.
Met vriendelijke groet,
CSShunter
 
Hoi Css Hunter,

Bedankt ik ga hier straks eens mee aan de slag

wat bedoel je hiermee±
`Het javascript op het eind: anders is de id="alleenvoorbreed" er nog niet in de html-code.`

groet, Frenske
 
Is dat niet media-queries toepassen via JS? Zo werken sommige css-frameworks (zoals Twitter Bootstrap en Zurb Foundation") ook. Met CSS classes als "hidden-tablet" en "visible-phone".
 
Dit wil ik invoegen (statement) wat ingekort;

is de resolutie groter dan 800 voeg onderstaande in

Code:
 <div id="overlay" class="overlay"></div> 
<?php  
$RandomNumber = rand(1,4);
  if ($RandomNumber == '1') { 
   echo '<div id="boxpopup" class="a">';
} else {
   echo '<div id="boxpopup" class="b">';
}
?>   
<a onclick="closeOffersDialog('boxpopup');" class="boxclose" title="Klik om te sluiten"></a>
<div id="content">
</div>
</div>

Is die kleiner , niks invoegen/of niet laten zien
 
Is dat niet media-queries toepassen via JS?
Lijkt me wel. :)

=======
Wat bedoel je hiermee: 'Het javascript op het eind: anders is de id="alleenvoorbreed" er nog niet in de html-code.'
Als je het javascript in de <head> zou zetten, gaat het meteen los. Maar op dat moment is de <body>-code nog niet ingelezen, en de <div id="alleenvoorbreed"> bestaat nog niet. - Dan kan deze ook niet via dat javascript een aangepaste stijl (in dit geval: niet vertonen) krijgen.

Wat ook kan: er een onload in het script omheen bouwen, maar dat vraagt weer wat extra code. Dan zou het wel in de <head> kunnen komen. Maar: het javascript moet dan toch wachten tot de hele <body> aanwezig is, voordat het iets kan doen. - Het script op het eind doet dat ook, en vertraagt daarmee het inladen van de rest niet.

O, dat was een kruispost. ;)

Dan kan het worden:
[js]
<script type="text/javascript">
//<![CDATA[
if (screen.width <= 800) {
document.getElementById('boxpopup').style.display="none";
}
//]]>
</script>
[/js]
  • Bij groter dan 800px blijft de boxpopup gewoon staan.
  • Bij kleiner wordt ie uitgegumd voordat ie op scherm van de bezoeker komt (nou ja, een fractie van een millisec. later, maar dat is niet te zien).
Werkt dat volgens verwachting?
 
Laatst bewerkt door een moderator:
Hoi,


Er wordt nog een popup.js ingevoegd dat zorgt voor problemen: //$('#boxpopup').css('display','block'); even buitenspel gezet

Code:
function openOffersDialog() {
	$('#overlay').fadeIn('slow', function() {
		//$('#boxpopup').css('display','block');
        $('#boxpopup').animate({'left':'27%'},500);
    });
}


function closeOffersDialog(prospectElementID) {
	$(function($) {
		$(document).ready(function() {
			$('#' + prospectElementID).css('position','absolute');
			$('#' + prospectElementID).animate({'left':'-100%'}, 500, function() {
				$('#' + prospectElementID).css('position','fixed');
				$('#' + prospectElementID).css('left','100%');
				$('#overlay').fadeOut('fast');
			});
		});
	});
}

en dit in mijn head zet

Code:
<style type="text/css">
  #boxpopup { display: block }
  </style>

komt er geen popup (ff voor test CSS)
 
Juistem, dat krijg je soms als je een probleem vereenvoudigt: er speelt meer mee. :P

Misschien kan je dan die twee animatie-jQuery dingen inpakken in de "genoeg breedte voorwaarde"?
[JS]if (screen.width > 800) {
function openOffersDialog() {
...
}
function closeOffersDialog(prospectElementID) {
...
}
}[/JS]
 
O!
Je zei "Er wordt nog een popup.js ingevoegd dat zorgt voor problemen" (met de jQuery-code als boven).
Ik begreep:
  • De #boxpopup wordt normaal via dat script aangezet/gesloten met animatie.
  • De display="block" uit dat script omzeilt/overrule't de document.getElementById('boxpopup').style.display="none" die in mijn scriptje staat om de #boxpopup niet te tonen als het scherm <= 800px.
  • Daarom heb je voor test het jQuery-script even buitenspel gezet, en de #boxpopup via de <head>-css in principe op {display:block} gezet.
  • Als daarna mijn javascriptje er overheen gaat, wordt de #boxpopup niet getoond bij opening van de pagina op <= 800px; dus dan werkt dat volgens plan.
Ga je nu de <head>-css op {display:none} zetten (of dat staat al in je standaard stylesheet, wat op hetzelfde neerkomt), dan blijft ie weliswaar bij opening pagina via mijn scriptje uit staan, maar wordt ie later bij het triggeren van de functie openOffersDialog() weer aangezet los van de schermbreedte. - En dan is het probleem weer terug: dat is niet de bedoeling.

Dus dacht ik: dan hoef je geen algemene maatregel {display:none} te geven (via mijn scriptje, dat alleen bij de opening van de pagina werkt), maar moet je bij het triggeren van de openOffersDialog() verhinderen dat ie getoond wordt bij smalle schermen.
Vandaar had ik de voorwaarde daar gedropt: alleen triggeren als > 800px.

Maar zoals ik hem had, bestaat de hele functie openOffersDialog() niet bij <=800; en ook de closeOffersDialog(prospectElementID) niet. Dat geeft dan bij de trigger een fout, want de functies kunnen niet gevonden worden.
Het lijkt me dus bij nader inzien beter, om de voorwaarde binnen de twee functies te zetten: dan blijven de functies overeind, maar doen ze alleen niets als <=800.
D.w.z.:
[JS]function openOffersDialog() {
if (screen.width > 800) { // alleen de #boxpopup tevoorschijn toveren als er ruimte genoeg is
$('#overlay').fadeIn('slow', function() {
$('#boxpopup').css('display','block');
$('#boxpopup').animate({'left':'27%'},500);
});
}
}
function closeOffersDialog(prospectElementID) {
if (screen.width > 800) { // en ook alleen dan hoeft ie weer te verdwijnen
$(function($) {
$(document).ready(function() {
$('#' + prospectElementID).css('position','absolute');
$('#' + prospectElementID).animate({'left':'-100%'}, 500, function() {
$('#' + prospectElementID).css('position','fixed');
$('#' + prospectElementID).css('left','100%');
$('#overlay').fadeOut('fast');
});
});
});
}
}[/JS]
Het scriptje op einde pagina komt dan helemaal te vervallen.

Met vriendelijke groet,
CSShunter
 
Hoi Frenske,
Ja, nu zie ik wat precies de bedoeling is.
Hij werkt niet helemaal, omdat:
  • De beschikbare breedte wordt opgemeten met screen.width. Maar dat is de resolutie-breedte, en niet de echte window-breedte. Dus dan kan je (a) 'm niet testen door je venster te verkleinen, en (b) dan werkt het niet als iemand zijn/haar browserwindow versmald heeft tot < 800px.
  • De overlay staat standaard aan (omdat de popup daaroverheen moet komen binnenvliegen). Maar bij window < 800px komt er geen popup, dus dan moet er ook geen overlay komen, anders is alles van de pagina verschaduwd, en kan je ook niet meer bij de links op de pagina komen.
  • De popup heeft een vaste breedte en vaste hoogte in de opmaak, en een {position : fixed}. Dat gaat alleen goed bij bredere schermen, bij smallere schermen valt de popup aan de rechterkant buiten beeld: daar kan je niet bij komen, en dan is ook het knopje om 'm uit te zetten niet bereikbaar!
pop-840.png

bij scherm/vensterbreedte 840px

Wat hier aan gedaan kan worden:
  • De breedte op laten meten via de offsetWidth van de <body>.
  • De overlay standaard uit zetten, en pas via het script aanzetten als de breedte groot genoeg is voor spontane vertoning van de popup, of als de popup via de link "Click here" op verzoek wordt getoond (ook bij lage resoluties).
  • De link "Click here" krijgt een mechaniekje om toch de popup te kunnen tonen bij < 800px.
  • De popup een relatieve breedte geven in % van de beschikbare breedte, met wel een max-width om niet overdadig groot te worden bij grote schermen; en de hoogte laten vervallen (die past zich automatisch aan aan de inhoud).
  • Om ook de hoogte van de popup niet buiten beeld te laten vallen bij kleine schermen, moet de {position: fixed} omgezet worden in een {position: absolute}, dan is de hoogte weer wel scrollbaar.
  • Om geen scrollbar rechts te krijgen als de popup buiten beeld is geanimeerd, krijgt de popup een {display: none} als ie er niet is.
  • Verder hoeft de voorwaarde >800 niet opgenomen te worden in de uitzet-functie, want die mag altijd (en komt toch niet spontaan tevoorschijn als de popup er niet is).
  • Met een linkerkant-percentage van {'left':'23%'} past ie er nog net op bij een mobieltje in portret-oriëntatie.
pop-mobiel.png

De link in de html wordt dan aangepast tot:
HTML:
...
    <a onclick="openWithLink=1; openOffersDialog();">Click Here To See The PopUp</a>
...
Hiermee kan het script worden:
[JS]var openWithLink=0;
function openOffersDialog() {
// alleen de #boxpopup tevoorschijn toveren als er ruimte genoeg is
// of als op de Click Here link is geklikt
var availableW=document.getElementsByTagName('body')[0].offsetWidth;
if (availableW > 800 || openWithLink==1) {
document.getElementById('overlay').style.display='block';
$('#overlay').fadeIn('slow', function() {
$('#boxpopup').css('left','100%');
$('#boxpopup').css('display','block');
$('#boxpopup').animate({'left':'23%'},500);
});
}
}
function closeOffersDialog(prospectElementID) {
$(function($) {
$(document).ready(function() {
$('#' + prospectElementID).css('position','absolute');
$('#' + prospectElementID).animate({'left':'-100%'}, 500, function() {
$('#overlay').fadeOut('fast');
$('#boxpopup').css('display','none');
});
});
});
}
[/JS]

  • Test: jq-pop-nw.htm
  • De background-images zijn vervangen door kleurtjes.
  • Voor de aangepaste css zie de broncode.
Beter?
Met vriendelijke groet,
CSShunter
 
Hoi CssHunter,

Super bedankt werkt goed!.

Nou had ik zelf diverse classes aan de #boxpopup gegeven zie mijn post 10, door het php statement werd de achtergrond afbeelding , veranderd ff kijken hoe ik dat oplos anders doe ik het weer met tekst verder geen probleem:)

In de praktijk schijnt bij Chrome gebruikers (heeft niks met de veranderingen te maken zoals jij die hebt aangepast) de box nogal eens te blijven hangen waardoor de bezoeker niet verder kan, zelf ik ik de link verwijderd > <a onclick="openWithLink=1; openOffersDialog();">Click Here To See The PopUp</a> omdat ik wil dat de box vanzelf opent bij openen pagina , heb je of iemand toevallig geen idee waardoor dit komt of hoe te vermijden?
Nou weet ik dat chroem wat cache e.d betreft nogal eens raar kan doen.


groet,

Frenske
 
Hoi Frenske,
... achtergrond afbeelding veranderd; ff kijken hoe ik dat oplos ...
Moet gewoon kunnen met css, zou ik denken. :)

=======
In de praktijk schijnt bij Chrome-gebruikers (...) de box nogal eens te blijven hangen waardoor de bezoeker niet verder kan ...
Hé, ik heb m'n testpagina net zo'n 25 keer in Chrome herhaald, en niets van haperingen te bekennen. :rolleyes:
Ook in de "incognito-modus" geeft Chrome bij mij geen enkel probleem.

Of heb je nog een aantal andere jQuery-grappen op de pagina staan? Dan zouden die misschien kunnen interfereren.
En hapert ie dan ook in Safari (want die heeft dezelfde Webkit rendering machine als Chrome)?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan