Javascript 移动设备上的元素位置与桌面上的元素位置不同

Javascript 移动设备上的元素位置与桌面上的元素位置不同,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我最近一直在试验jQuery,并制作了一种弹出菜单。 弹出div的位置是在我显示它或窗口调整大小时计算出来的 我注意到去定位在移动设备上不能正常工作,弹出的div显示得太偏了 为什么移动设备上显示的弹出div与桌面上显示的不同 下面是一个在台式pc上运行良好的工作示例,以下两幅图像显示了移动设备上出现的问题: $(文档).ready(函数(){ $(“.button”).mouseover(函数(){ showPopup(); }); var超时; $(“.popup”).mouselea

我最近一直在试验jQuery,并制作了一种弹出菜单。 弹出div的位置是在我显示它或窗口调整大小时计算出来的

我注意到去定位在移动设备上不能正常工作,弹出的div显示得太偏了

为什么移动设备上显示的弹出div与桌面上显示的不同

下面是一个在台式pc上运行良好的工作示例,以下两幅图像显示了移动设备上出现的问题:

$(文档).ready(函数(){
$(“.button”).mouseover(函数(){
showPopup();
});
var超时;
$(“.popup”).mouseleave(函数(){
timeout=setTimeout(函数(){hidePopup(500);},500);
});
$(“.popup”).mouseenter(函数(){
clearTimeout(超时);
});
$(“.button”)。单击(函数(){
切换弹出按钮();
});
$(“.closebutton”)。单击(函数(){
hidePopup(0);
});
$(窗口)。调整大小(函数(){
positionPopup();
});
});
函数positionPopup(){
var pos=$(“.button”).offset();
var h=$(“.button”).height();
var w=$(“.button”).width();
var widthPopUp=$(“.popup”).width();
var heightPopUp=$(“.popup”).height();
$(“.popup”).css({left:pos.left-widthPopUp-20-3+w,top:pos.top+h+10});
}
函数showPopup(){
positionPopup();
$(“.popup”).fadeIn(300);
}
函数hidePopup(延迟){
if(类型(延迟)==‘未定义’){
延迟=1000;
}
$(“.popup”).fadeOut(延迟);
}
函数togglePopup(){
positionPopup();
$(“.popup”).toggle();
}
*{
框大小:边框框;
}
html,正文{
边际:0px;
填充:0px;
}
.集装箱{
宽度:500px;
边框:1px纯黑;
保证金:50px自动;
高度:自动;
位置:相对位置;
边界半径:2px;
填充:10px;
填充顶部:25px;
}
巴顿霍尔德先生{
高度:20px;
宽度:20px;
文本对齐:居中;
线高:15px;
右:0px;
顶部:0px;
位置:绝对位置;
保证金:3倍;
显示:块;
}
.按钮{
光标:指针;
}
.弹出窗口{
边框:#DDDDDD 1px实心;
宽度:200px;
高度:40px;
显示:无;
位置:绝对位置;
背景色:白色;
填充:10px;
边界半径:2px;
}
.closebtnholder{
位置:绝对位置;
顶部:0px;
右:0px;
保证金:3倍;
文本对齐:居中;
}
.关闭按钮{
光标:指针;
字号:10pt;
}
.popup::之后{
边框底部:8px实心#DDDDDD;
左边框:6px实心透明;
右边框:6px实心透明;
宽度:0;
身高:0;
内容:“;
显示:块;
位置:绝对位置;
顶部:-8px;
左:184px;
}

提供头衔
[?]
“同侧性”是一个非常重要的概念。Lorem Ipsum是标准的
在16年前的一个月里,该项目曾多次收到信件
nam en ze door elkaar husselde om een字体目录。他是我的朋友
上一页是《电子报》上的奥克、弗里维尔和奥基诺曼。他在60年的德加伦
格沃登和范莱拉塞特·维伦在最近的一次会面中遇到了洛雷姆·伊普森
门桌面出版软件zoals Aldus PageMaker die Versions van Lorem Ipsum bevatten。
[x]

向css添加媒体查询,如下所示:

@media (max-width: 480px){
   .container {
    width: calc(100% - 50px);
    border: 1px solid black;
    margin: 50px auto;
    height: auto;
    position: relative;    
    border-radius: 2px;
    padding: 10px;
    padding-top: 25px;
} 

请参见fiddle有多种方法可以解决此问题。您可以使用响应css框架,例如twitter引导,或者您可以创建一个新的样式表来覆盖当前的样式表(当它是移动设备时)

使用PHP有点像这样:

<link rel="stylesheet" type="text/css" href="/css/main.css" />
<?php
$isMobile = (bool)preg_match('#\b(ip(hone|od|ad)|android|opera m(ob|in)i|windows (phone|ce)|blackberry|tablet'.
    '|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp|laystation portable)|nokia|fennec|htc[\-_]'.
    '|mobile|up\.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\b#i', $_SERVER['HTTP_USER_AGENT'] );
if($isMobile){ ?>
    <link rel="stylesheet" type="text/css" href="/css/mobile.css" />
<?php } ?>

澄清一下,这是一个简单的修复方法,但我强烈建议学习一个响应性框架。从长远来看,这将为您节省大量时间。

下面是对您的代码片段的一些调整

$(文档).ready(函数(){
$(“.button”).mouseover(函数(){
showPopup();
});
var超时;
$(“.popup”).mouseleave(函数(){
timeout=setTimeout(函数(){hidePopup(500);},500);
});
$(“.popup”).mouseenter(函数(){
clearTimeout(超时);
});
$(“.button”)。单击(函数(){
切换弹出按钮();
});
$(“.closebutton”)。单击(函数(){
hidePopup(0);
});					
});
函数showPopup(){
$(“.popup”).fadeIn(300);
}
函数hidePopup(延迟){
if(类型(延迟)==‘未定义’){
延迟=1000;
}
$(“.popup”).fadeOut(延迟);
}
函数togglePopup(){
$(“.popup”).toggle();
}
*{
框大小:边框框;
}
html,正文{
边际:0px;
填充:0px;
}
.集装箱{
边框:1px纯黑;
保证金:
.container {
width: 300px;  //this will overwrite your old one
}