0

PaulHayesのCSSTransitionsMedia Queryスクリプトを使用していますが、単純なif/elseを実行する方法がわかりません。

これが私が求めていることです:

mql('all and (max-width: 959px)', change);
mql('all and (min-width: 960px)', change);

function change(mql) {
    if(max-width: 959px) {
        console.log("Do this");
    } else {
        console.log("Do that");
    }
}

これがmql/paulのスクリプトです:

mql = (function(doc, undefined) {

    var docElem = doc.documentElement,
        refNode = docElem.firstElementChild || docElem.firstChild,
        idCounter = 0;
        if(!doc.getElementById('mq-style')) {
          style = doc.createElement('style');
          style.id = 'mq-style';
          style.textContent = '.mq { -webkit-transition: width 0.001ms; -moz-transition: width 0.001ms; -o-transition: width 0.001ms; -ms-transition: width 0.001ms; width: 0; position: absolute; top: -100em; }\n';
          docElem.insertBefore(style, refNode);          
        }

     var transitionEnds = Array('transitionend','webkitTransitionEnd','oTransitionEnd','msTransitionEnd');

     for(var i in transitionEnds) { 
    if ('on'+ transitionEnds[i].toLowerCase() in window)  transitionEnd = transitionEnds[i];
     }  

    return function(q, cb) {

        var id = 'mql-' + idCounter++,
            callback = function() {
                // perform test and send results to callback
                cb({
                    matches: (div.offsetWidth == 42),
                    media: q
                });
            },
            div = doc.createElement('div');

        div.className = 'mq'; // mq class in CSS declares width: 0 and transition on width of duration 0.001ms
        div.id = id;
        style.textContent += '@media ' + q + ' { #' + div.id + ' { width: 42px; } }\n';        

        // add transition event listener
        div.addEventListener(transitionEnd, callback, false); 

        docElem.insertBefore(div, refNode);

        // original polyfill removes element, we need to keep element for transitions to continue and events to fire.

        return {
            matches: div.offsetWidth == 42,
            media: q
        };
    };

})(document);
4

3 に答える 3

1

あなたのifは次のようなものに変更する必要があります:

mql('all and (max-width: 959px)', change);
mql('all and (min-width: 960px)', change);

function change(mql) {
    if(max-width == '959px') {
        console.log("Do this");
    } else {
        console.log("Do that");
    }
}
于 2012-06-14T21:05:48.770 に答える
0
var mq = window.matchMedia( "(min-width: 959px)" ); 
mq.addListener(WidthChange);
WidthChange(mq); 

function WidthChange(mq) {
    if (mq.matches) {
        console.log("Do this"); // window width is at least 959px
    } else {
        console.log("Do this"); // window width is at less than 959px
    }
}
于 2012-06-14T21:06:57.863 に答える
0

change関数で提供される情報を使用してこれを実行できる唯一の方法は、次のとおりです。

mql('all and (max-width: 959px)', change);
mql('all and (min-width: 960px)', change);

function change(mql) {
    if(mql.media.indexOf('max-width: 959px') !== -1 && mql.matches) {
        console.log("Do this");
    } else {
        console.log("Do that");
    }
}

しかし、私はそれがそれほど気分が良くないと言わなければなりません...私はメディアクエリごとに1つずつ2つの別々のコールバックを検討します。

于 2012-06-14T21:23:34.140 に答える