style wissel met cookie

Status
Niet open voor verdere reacties.
Dit is voldoende voor het toggelen van de class in body.
Code:
<div class="toggle-box">
    <input type="checkbox" name="checkbox1" id="toggle-box-checkbox" />
</div>

<script src="jquery-3.3.1.min.js"></script>
<script>
$('#toggle-box-checkbox').on('click', function(){
  $('body').toggleClass('night');
});
</script>
 
Laatst bewerkt:
Als je de cookie erin zet krijg je iets als dit.
De cookie (naam is 'usertheme') bevat de waarde 'default' (overdag) of 'night' (nacht). Dit vind je terug in de class van body en kan je dus gebruiken in je css. Als je binnen 30 dgen (kan je veranderen) op de pagina terug komt dan staan de theme én de checkbox goed.
Code:
<style>
h1 {color: blue}
.night {background: black}
.night h1 {color: grey}
</style>

<body class="default"> <!--toggle tussen default en night -->

<div class="toggle-box">
    <input type="checkbox" name="checkbox1" id="toggle-box-checkbox" />
</div>

<h1>Dit is een tekst</h1>

<script src="jquery-3.3.1.min.js"></script>

<script>
function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 3600 * 1000)); // totaal is vervaltijd in msec
    document.cookie = cname + "=" + cvalue + ";expires=" + d.toUTCString() + ";path=/";
}

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1);
        if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
    }
    return "";
}

$(document).ready(function() {

    // themeCheckBox is de checkbox.
    var themeCheckBox = $('#toggle-box-checkbox');
    // themeCookie is de waarde van cookie 'usertheme' (kan leeg zijn)
    var themeCookie = getCookie('usertheme');
    // controleer of themeCookie een lege waarde heeft
    if (themeCookie == '') {
        // waarde is leeg: geef themeCookie dan een waarde 'default'
        themeCookie = 'default';
    } else {
        // waarde is niet leeg (wel of geen night): dan de checkbox aan- of uitvinken
        themeCheckBox.prop('checked', (themeCookie === 'night'));
    }
    // hier is de class bekend. verwijder oude classes en geef body de goede class
    $('body').removeClass('default night').addClass(themeCookie);

    // als op checkbox wordt geklikt: start een naamloze functie
    themeCheckBox.on('click', function() {
        // de themeName is night of default, afhankelijk van de checkbox
        var themeName = ($(this).prop("checked")) ? 'night' : 'default';
        // verwijder oude classes en geef body de goede class
        $('body').removeClass('default night').addClass(themeName);
        // zet de gekozen themeName in een cookie met vervaltijd 30 dagen
        setCookie('usertheme', themeName, 30);
    });

});
</script>

Edit: ik zie dat je wat moeite met Javascript / jQuery hebt.
Daarom de commentaar regels ertussen gezet.
 
Laatst bewerkt:
Bedankt voor jullie hulp.

Wellicht cursusje Javascript / jQuery , snap niet veel van de functies e.d

Opmerking , geef ik de body GEEN class default (wa sik vergeten) werkt het ook.
 
Was mijn uitleg dan niet duidelijk, vraag ik mij af? :p
 
Haha Bron heeft roet in de code gegooid ;) (kerstcadeautje)

Ik moet het op mijn gemak bekijken PHP kom ik nog aardig doorheen , maar dit kost nogal wat moeite.
 
Laatst bewerkt:
Was mijn uitleg dan niet duidelijk, vraag ik mij af?
De info is duidelijk maar ik denk dat de hoeveelheid posts het voor TS lastig hebben gemaakt.

Opmerking , geef ik de body GEEN class default (wa sik vergeten) werkt het ook.
Yep, je mag class="default" in de body weglaten. Het script handelt dit zelf af in dit stukje
Code:
var themeCookie = getCookie('usertheme');
if (themeCookie == '') {
    [B]themeCookie[/B] = 'default';
} else {
    ....
}
$('body').removeClass('default night').addClass([B]themeCookie[/B]);

PHP kom ik nog aardig doorheen , maar dit kost nogal wat moeite.
De principes van programmeertalen zijn hetzelfde :D de manier van opschrijven is verschillend.

Suc6 met je website.
 
Laatst bewerkt:
Maak het wat robuurster door deze 2 functies te vervangen.
Code:
function setCookie(cname, cvalue, exdays) {
    var e = encodeURIComponent(cname) + "=" + encodeURIComponent(cvalue);
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 3600 * 1000));
    document.cookie = e + ";expires=" + d.toUTCString() + ";path=/";
}

function getCookie(cname) {
    var n = encodeURIComponent(cname) + "=";
    var a = document.cookie.split(';');
    for(var i = 0; i < a.length; i++) {
        var c = a[i];
        while (c.charAt(0) == ' ') c = c.substring(1);
        if (c.indexOf(n) == 0) return decodeURIComponent(c.substring(n.length, c.length));
    }
    return "";
}

encodeURIComponent() codeert "speciale" tekens én de tekens @ & , / ? : = + $ #
Bij het opvragen van de cookie wordt de waarde met decodeURIComponent() gedecodeerd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan