我正在尝试在我正在构建的网页上检测移动浏览器。桌面上的人会看到“粘性”菜单,而移动设备上的菜单则不会。
但是我有非常基本的技能,并没有真正超越HTML和CSS,让我觉得难以让它发挥作用。我希望有人可以指出任何显而易见的事情,因为我没有意识到......
我正在使用51Degrees PHP移动设备检测器(http://sourceforge.net/projects/fiftyone/)。
在我的主要网络文件中,我按照这里的说明进行操作:http://andrewhenderson.me/tutorial/jquery-sticky-sidebar/使用jQuery将粘性菜单合并到页面中。
所以我想要做的只是在用户不在移动设备上时使用粘性菜单CSS更改,使用从PHP移动探测器返回的值。
PHP部分:
<?php
session_start();
include_once('51Degrees/core/51Degrees.php');
include_once('51Degrees/core/51Degrees.usage.php');
?>
根据用户浏览器提供变量$_51d[‘IsMobile’]
的值为True或False的文档。
根据我所读到的,PHP值可以传递给jQuery,因为两者都在同一个文件中。我发现建议使用这样的东西:var mobile = <?php echo ($_51d[‘IsMobile’]); ?>;
。然后我想检查mobile
是真还是假,如果它是假的,只继续使用脚本的其余部分。但我不确定如何去做,或者我的语法是否正确。无论哪种方式,我都没有得到我想要的结果。
<script type="text/javascript">
//<![CDATA[
$(function(){ // document ready
var mobile = <?php echo ($_51d[‘IsMobile’]); ?>;
if (mobile == 'false') {
if (!!$('.sticky').offset()) { // make sure ".sticky" element exists
var stickyTop = $('.sticky').offset().top; // returns number
$(window).scroll(function(){ // scroll event
var windowTop = $(window).scrollTop(); // returns number
if (stickyTop < windowTop){
$('.sticky').css({ position: 'fixed', top: 0 });
}
else {
$('.sticky').css('position','static');
}
});
}
}
});
//]]>
</script>
我认为这是一个非常明显和愚蠢的事情,我在这里失踪了,但由于我缺乏背景,我只是没有发生。任何帮助将不胜感激。
编辑:
感谢您的所有投入。在讨论了一些建议之后,似乎我的主要问题是将变量的值从PHP变为jQuery(在同一页面上)。
var mobile = <?php echo ($_51d[‘IsMobile’]); ?>;
有问题。该值不会传递给jQuery。我在页面源代码中看到的只有var mobile = ;
,我尝试了各种不同的编写方式来适应其他PHP方法。
有人发现了什么问题吗?
答案 0 :(得分:0)
你可以很容易地做到这一点 -
<script type="text/javascript">
if (screen.width <= 800) {
//do whatever you want
}
</script>
答案 1 :(得分:0)
您可以使用jquery
检测设备移动设备$.browser.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));
答案 2 :(得分:0)
使用http://detectmobilebrowsers.com/
中的示例PHP:
<?php
$useragent = $_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) {
$isMobile = true;
} else {
$isMobile = false;
}
?>
jQuery的:
<script>
(function(a){(jQuery.browser=jQuery.browser||{}).mobile=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);
var isMobile = jQuery.browser.mobile;
</script>
使用PHP版本,然后在Javascript / jQuery中访问$isMobile
;
<script>
var mobile = '<?php echo ($isMobile); ?>';
if (mobile == false) {
console.log('FALSE');
} else {
console.log('TRUE');
}
</script>
答案 3 :(得分:0)
modernizr是最好的插件。
该插件为html标记提供了许多可用于css或jquery的有用类。 (就像它的移动设备,或触摸设备等......)
jquery的:
if($('html').hasClass('touch')){ /* forgot the exact name of the classes modernizr gives the html tag. just look it up at your tag after you installed the plugin */
// do something only in mobile
}
但在你的情况下,我肯定会建议使用mediaquerys和css。
所以对于智能手机肖像,请使用:
@media all and (max-width: 420px) {}
智能手机格局使用:
@media all and (max-width: 580px) {}
平板电脑肖像使用:
@media all and (max-width: 768px) {}
平板电脑风景使用:
@media all and (max-width: 1024px) {}
不要忘记将视口设置在头部,也许像:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
问候timotheus
答案 4 :(得分:0)
我喜欢移动侦测(http://mobiledetect.net/)。它是一个开源PHP类,您可以将其添加到您的应用程序中,然后像这样使用:
$detect = new Mobile_Detect;
$mobile = $detect->isMobile();
if($mobile)
// Call mobile page template
else
// Call desktop page template
答案 5 :(得分:0)
您可以使用mobiledetect库
作为作曲者软件包安装
下载链接和更多信息https://packagist.org/packages/mobiledetect/mobiledetectlib
和有关主题的文章
http://computerengineeringfree4u.xyz/how-to-detect-mobile-device-in-php/
希望您能找到解决方法