2015-09-15 190 views
0

我最近一直在用jQuery进行实验并做了一些popup菜单。 当我显示它或当窗口大小调整时,会弹出div的位置。元素在移动设备上的位置不同于桌面上的

我注意到de定位在移动设备上无法正常工作,弹出的div显示的太多了。

为什么这个popup div在移动设备上显示的不同于桌面上的?

下面是一个工作的例子,其在台式电脑正常工作,这里是2倍的图像,展示一下在移动设备上出了问题:

wrong position of popup div wrong position of popup div

  $(document).ready(function() { 
 
       $(".button").mouseover(function() { 
 
        showPopup(); 
 
       }); 
 
     
 
       var timeout; 
 
       $(".popup").mouseleave(function() { 
 
        timeout = setTimeout(function() {hidePopup(500);}, 500);      
 
       }); 
 
       
 
       $(".popup").mouseenter(function() { 
 
        clearTimeout(timeout);     
 
       }); 
 
       
 
       $(".button").click(function() { 
 
        togglePopup(); 
 
       }); 
 
       
 
       $(".closebutton").click(function() { 
 
        hidePopup(0); 
 
       }); 
 
       
 
       $(window).resize(function() { 
 
        positionPopup(); 
 
       }); 
 
           
 
      }); 
 
      
 
      function 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});   
 
      } 
 
      
 
      function showPopup() { 
 
       positionPopup(); 
 
       $(".popup").fadeIn(300); 
 
      } 
 
      
 
      function hidePopup(delay) { 
 
       if (typeof(delay) === 'undefined') { 
 
        delay = 1000; 
 
       } 
 
       $(".popup").fadeOut(delay); 
 
      } 
 
      
 
      function togglePopup() { 
 
       positionPopup(); 
 
       $(".popup").toggle(); 
 
      }
* { 
 
    box-sizing: border-box; 
 
} 
 

 
html, body { 
 
    margin: 0px; 
 
    padding: 0px; 
 
} 
 

 
.container { 
 
    width: 500px; 
 
    border: 1px solid black; 
 
    margin: 50px auto; 
 
    height: auto; 
 
    position: relative;  
 
    border-radius: 2px; 
 
    padding: 10px; 
 
    padding-top: 25px; 
 
} 
 

 
.buttonholder { 
 
    height: 20px; 
 
    width: 20px; 
 
    text-align: center; 
 
    line-height: 15px; 
 
    right: 0px; 
 
    top: 0px; 
 
    position: absolute; 
 
    margin: 3px; 
 
    display: block; 
 
} 
 

 
.button { 
 
    cursor: pointer; 
 
} 
 

 
.popup{ 
 
    border: #DDDDDD 1px solid; 
 
    width: 200px; 
 
    height: 40px; 
 
    display: none; 
 
    position: absolute; 
 
    background-color: white; 
 
    padding: 10px; 
 
    border-radius: 2px; 
 
} 
 

 
.closebtnholder { 
 
    position: absolute; 
 
    top: 0px; 
 
    right: 0px; 
 
    margin: 3px; 
 
    text-align: center; 
 
} 
 

 
.closebutton { 
 
    cursor: pointer; 
 
    font-size: 10pt; 
 
} 
 

 
.popup::after { 
 
    border-bottom: 8px solid #DDDDDD; 
 
    border-left: 6px solid transparent; 
 
    border-right: 6px solid transparent; 
 
    width: 0; 
 
    height: 0; 
 
    content: ""; 
 
    display: block; 
 
    position: absolute; 
 
    top: -8px; 
 
    left: 184px; 
 
}
<!DOCTYPE html> 
 

 
<html> 
 
    <head> 
 
     <title>TODO supply a title</title> 
 
     <meta charset="UTF-8"> 
 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 
     <link rel="stylesheet" href="layout.css" /> 
 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>   
 
    </head> 
 
     
 
    <body> 
 
     <div class="container"> 
 
      
 
      <div class="buttonholder"> 
 
       <div class="button">[?]</div> 
 
      </div> 
 
      
 
      Lorem Ipsum is slechts een proeftekst uit het drukkerij- en zetterijwezen. Lorem Ipsum is de standaard 
 
      proeftekst in deze bedrijfstak sinds de 16e eeuw, toen een onbekende drukker een zethaak met letters 
 
      nam en ze door elkaar husselde om een font-catalogus te maken. Het heeft niet alleen vijf eeuwen 
 
      overleefd maar is ook, vrijwel onveranderd, overgenomen in elektronische letterzetting. Het is in de jaren '60 
 
      populair geworden met de introductie van Letraset vellen met Lorem Ipsum passages en meer recentelijk 
 
      door desktop publishing software zoals Aldus PageMaker die versies van Lorem Ipsum bevatten. 
 
      
 
     </div> 
 
     
 
     <div class="popup"> 
 
      <div class="closebtnholder"> 
 
       <div class="closebutton">[x]</div> 
 
      </div> 
 
      <a href="http://google.be">google</a> 
 
     </div> 
 
     
 
     <div class="triangle"> 
 
      
 
     </div> 
 
     
 
    </body> 
 
</html>

回答

0

添加媒体查询到你的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; 
} 

看到小提琴https://jsfiddle.net/DIRTY_SMITH/rh6w934n/

0

有多种方法来解决这个问题。你可以使用一个响应式的css框架,比如twitter bootstrap,或者你可以创建一个新的样式表来覆盖当前的移动设备。

有点像这样使用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 } ?> 

然后在你的mobile.css,把你的造型为你的移动网页。

.container { 
width: 300px; //this will overwrite your old one 
} 

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

0

这里是一个小的调整你的片段

\t $(document).ready(function() { 
 
\t \t $(".button").mouseover(function() { 
 
\t \t \t showPopup(); 
 
\t \t }); 
 

 
\t \t var timeout; 
 
\t \t $(".popup").mouseleave(function() { 
 
\t \t \t timeout = setTimeout(function() {hidePopup(500);}, 500);      
 
\t \t }); 
 
\t \t 
 
\t \t $(".popup").mouseenter(function() { 
 
\t \t \t clearTimeout(timeout);     
 
\t \t }); 
 
\t \t 
 
\t \t $(".button").click(function() { 
 
\t \t \t togglePopup(); 
 
\t \t }); 
 
\t \t 
 
\t \t $(".closebutton").click(function() { 
 
\t \t \t hidePopup(0); 
 
\t \t }); \t \t \t \t \t 
 
\t }); 
 

 
\t function showPopup() { 
 
\t \t $(".popup").fadeIn(300); 
 
\t } 
 

 
\t function hidePopup(delay) { 
 
\t \t if (typeof(delay) === 'undefined') { 
 
\t \t \t delay = 1000; 
 
\t \t } 
 
\t \t $(".popup").fadeOut(delay); 
 
\t } 
 

 
\t function togglePopup() { 
 
\t \t $(".popup").toggle(); 
 
\t }
* { 
 
    box-sizing: border-box; 
 
} 
 

 
html, body { 
 
    margin: 0px; 
 
    padding: 0px; 
 
} 
 

 
.container { 
 
    border: 1px solid black; 
 
    margin: 50px auto; 
 
    height: auto; 
 
    position: relative;  
 
    border-radius: 2px; 
 
    padding: 10px; 
 
    padding-top: 25px; 
 
} 
 
@media only screen and (min-width: 540px) { 
 
\t .container { 
 
\t \t width: 500px; 
 
\t } 
 
} 
 
@media screen and (max-width: 539px) { 
 
\t .container { 
 
\t \t width: calc(100% - 20px); 
 
\t \t margin: 20px auto; 
 
\t } 
 
} 
 

 
.buttonholder { 
 
    height: 20px; 
 
    width: 20px; 
 
    text-align: center; 
 
    line-height: 15px; 
 
    right: 0px; 
 
    top: 0px; 
 
    position: absolute; 
 
    margin: 3px; 
 
    display: block; 
 
} 
 

 
.button { 
 
    cursor: pointer; 
 
} 
 

 
.popup{ 
 
    border: #DDDDDD 1px solid; 
 
    width: 200px; 
 
    height: 40px; 
 
    display: none; 
 
    position: absolute; 
 
    background-color: white; 
 
    padding: 10px; 
 
    border-radius: 2px; 
 
} 
 

 
.closebtnholder { 
 
    position: absolute; 
 
    top: 0px; 
 
    right: 0px; 
 
    margin: 3px; 
 
    text-align: center; 
 
} 
 

 
.closebutton { 
 
    cursor: pointer; 
 
    font-size: 10pt; 
 
} 
 
.popup { 
 
\t position: absolute; 
 
\t top: 2em; 
 
\t right: 0; 
 
} 
 
.popup::after { 
 
    border-bottom: 8px solid #DDDDDD; 
 
    border-left: 6px solid transparent; 
 
    border-right: 6px solid transparent; 
 
    width: 0; 
 
    height: 0; 
 
    content: ""; 
 
    display: block; 
 
    position: absolute; 
 
    top: -8px; 
 
    left: 184px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
\t <div class="container"> 
 
\t \t 
 
\t \t <div class="buttonholder"> 
 
\t \t \t <div class="button">[?]</div> 
 
\t \t </div> 
 
\t \t 
 
\t \t Lorem Ipsum is slechts een proeftekst uit het drukkerij- en zetterijwezen. Lorem Ipsum is de standaard 
 
\t \t proeftekst in deze bedrijfstak sinds de 16e eeuw, toen een onbekende drukker een zethaak met letters 
 
\t \t nam en ze door elkaar husselde om een font-catalogus te maken. Het heeft niet alleen vijf eeuwen 
 
\t \t overleefd maar is ook, vrijwel onveranderd, overgenomen in elektronische letterzetting. Het is in de jaren '60 
 
\t \t populair geworden met de introductie van Letraset vellen met Lorem Ipsum passages en meer recentelijk 
 
\t \t door desktop publishing software zoals Aldus PageMaker die versies van Lorem Ipsum bevatten. 
 
\t \t 
 
\t \t <div class="popup"> 
 
\t \t \t <div class="closebtnholder"> 
 
\t \t \t \t <div class="closebutton">[x]</div> 
 
\t \t \t </div> 
 
\t \t \t <a href="http://google.be">google</a> 
 
\t \t </div> \t \t \t 
 
\t </div>

+0

感谢您使之更适应,但我仍然有放大的问号恩当点击它同样的问题。任何想法如何解决这一问题? – maikel

相关问题