Javascript获取PHP变量的屏幕宽度

Sco*_*ttD 5 javascript php

我有一个响应式网站,当网站位于其他导航链接旁边的"桌面"视图(屏幕可用宽度> 768)时,它具有简单的下拉登录菜单.当屏幕宽度低于768时,导航链接最终会出现在选择选项中.问题是下拉登录菜单在选择选项中不起作用.

<a href>当屏幕宽度小于768时,我想使用PHP将下拉登录菜单更改为一个简单的链接.

现在我在我的页面中<head>:

<?
$screenWidth = '<script type="text/javascript">document.write(screen.availWidth);</script>';
?>
Run Code Online (Sandbox Code Playgroud)

<body>:

<?
if($screenWidth <= "768") {
echo '<li><a href="login.php">Log in</a></li>';
} else {
?>
<div id="fancy">
<li id="login">
<a id="login-trigger" href="#">Log in <span>&#x25BC;</span></a>
<div id="login-content">
    <form>
        <fieldset id="inputs">
            <input id="username" type="email" name="Email" placeholder="Your email address" required>   
            <input id="password" type="password" name="Password" placeholder="Password" required>
        </fieldset>
        <fieldset id="actions">
            <input type="submit" id="submit" value="Log in">
            <label><input type="checkbox" checked="checked"> Keep me signed in</label>
        </fieldset>
    </form>
</div>                     
</li>
<? } ?>
Run Code Online (Sandbox Code Playgroud)

在我的桌面上,我回显了$ screenWidth,它给出了1920.因此我希望显示"花式"下拉登录菜单.(确实如此).

在我的手机上,$ screenWidth echo给出320.然后我希望<a href>显示链接.(它没有 - 而是显示"花式"菜单).

看起来奇怪的是,在体内回显时的变量将给出不同的数字,但是当在if语句中进行比较时,它不会改变输出.

有没有更好的方法来改变输出?

编辑:jquery响应式菜单代码

jquery.responsivemenu.js:

(function($) {
$.fn.responsiveMenu = function(options) {
    var defaults = {autoArrows: false}
    var options = $.extend(defaults, options);
    return this.each(function() {
        var $this = $(this);
        var $window = $(window);
        var setClass = function() {
            if ($window.width() > 768) {$this.addClass('dropdown').removeClass('accordion').find('li:has(ul)').removeClass('accorChild');}
            else {$this.addClass('accordion').find('li:has(ul)').addClass('accorChild').parent().removeClass('dropdown');}
        }
        $window.resize(function() {
            setClass();
            $this.find('ul').css('display', 'none');
        });
        setClass();
        $this
            .addClass('responsive-menu')
            .find('li.current a')
            .live('click', function(e) {
                var $a = $(this);
                var container = $a.next('ul,div');
                if ($this.hasClass('accordion') && container.length > 0) {
                    container.slideToggle();
                    return false;
                }
            })
            .stop()
            .siblings('ul').parent('li').addClass('hasChild');
        if (options.autoArrows) {
            $('.hasChild > a', $this)
            .find('strong').append('<span class="arrow">&nbsp;</span>');
        }
    });
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

Sim*_*e M 5

PHP是服务器端执行的,这意味着var screenWidth包含:"document.write(screen.availWidth);" 当你比较它.您的输出在客户端执行..


Bar*_*owe 5

Your simplest option might be to populate both options in the DOM, then use CSS3 Media queries to hide/show the proper element based on screen size.

So your HTML might look like:

          <li class="login-link"><a href="login.php">Log in</a></li>
          <div id="fancy">
          <li id="login">
            <a id="login-trigger" href="#">Log in <span>&#x25BC;</span></a>
            <div id="login-content">
                <form>
                    <fieldset id="inputs">
                        <input id="username" type="email" name="Email" placeholder="Your email address" required>   
                        <input id="password" type="password" name="Password" placeholder="Password" required>
                    </fieldset>
                    <fieldset id="actions">
                        <input type="submit" id="submit" value="Log in">
                        <label><input type="checkbox" checked="checked"> Keep me signed in</label>
                    </fieldset>
                </form>
            </div>                     
        </li>
Run Code Online (Sandbox Code Playgroud)

And your CSS could look like:

.login-link, #login{
    display: none;
}
@media screen and (max-width: 767px){
    .login-link {
         display: block;
    }
    #login{
         display: none;
    }
}
@media screen and (min-width: 768px) {
    #login{
         display: block;
    }
    .login-link{
         display: none;
    }
}
Run Code Online (Sandbox Code Playgroud)

Edit: Fixed #login reference. Edit 2: Adding JSFiddle Example JSFiddle Example