10
votes

Exécutez JavaScript / JQuery uniquement à l'écran, pas d'impression

Comment puis-je exécuter une fonction de jQuery uniquement sur l'écran @Media ?

arrière-plan:

J'ai un Screen.CSS stylesheet et un imprimable.css feuille de style. J'ai deux fonctions JavaScript, dont une je ne veux pas exécuter sur la version imprimée envie de la page.


1 commentaires

Juste pour clarifier: J'imprime en PDF, car je n'ai actuellement pas accès à une imprimante physique. Néanmoins, j'ai besoin de cela pour appliquer à la fois sur des hardcopies et des impressions PDF.


3 Réponses :


5
votes

Dans les derniers navigateurs, vous pouvez utiliser MatchsMedia:

if (window.matchMedia("screen").matches) {
    ....
}


1 commentaires

Elégant, cependant, mon script semble toujours s'appliquer également à l'impression (impression au format PDF). En utilisant Chrome 21, Firefox 11, Safari 6 sur Mac.



0
votes

Je pense que vous pourriez utiliser modernizr. Bien que, il doit y avoir une manière native de le faire dans JavaScript.

http://modernizr.com/docs / # MQ

Je ne l'ai jamais essayé, mais c'est quelque chose comme ceci: xxx

méfiez-vous avec les anciens navigateurs ne prenant pas en charge les requêtes multimédias.


4 commentaires

Merci, j'ai essayé votre suggestion, mais mon script semble toujours s'appliquer à imprimer (imprimé au format PDF). En utilisant Chrome 21, Firefox 11, Safari 6 sur Mac.


Dites-vous que ceci: modernizr.mq ("seul écran") est retourné true et exécuté votre code avant d'imprimer?


Oui, si (modernizr.mq ("seul écran")) {$ ("h1 '). Texte (" Ecran multimédia ");} me donne" écran multimédia "dans la fenêtre de navigation et PDF imprimer.


En fait, je ne pense pas que cela revenait vrai. Quelle classe donnerait-il à ma balise ?



9
votes

Tout script serait dirigé lorsque la page se charge, donc en utilisant si (modernizr.mq ("seul écran")) {$ ("h1 '). Texte (" Écran de support ");} code > est inutile car il exécute votre script tandis que em> vous êtes sur @media écran code>.

Au lieu de cela, vous devez détecter chaque fois que la requête multimédia change et changez la page. par conséquent. Vous pouvez utiliser quelque chose comme ENQUIRE.JS à faire si facilement: P>

// This is just an example, be more creative!

enquire.register("screen", {
    match: function() { 
        $('#only-show-on-screen').show();
    },
    unmatch: function() {
        $('#only-show-on-screen').hide();
    }
});


2 commentaires

C'est la vraie réponse. Toutes les autres réponses (à ce jour) attendent que la page soit rechargée sur l'impression, mais ce n'est pas le cas. Tout changement DOM effectué pour la version de l'écran persiste sur la version imprimée.


J'ai mis à jour ma réponse pour le rendre plus clair et comment cela pourrait être fait avec Enquire.js.