css - 更灵敏的街景主方向按钮

标签 css flexbox

背景

在混合 Android 应用程序中,我通过 Google Streetview API 获取用户当前位置的图像。我想要做的是提供一组指向四个主要方向的四个按钮——我认为这些是上、下、左、右而不是北、南等,因为电话屏幕的顶部不会一定要指向“北”。这是我现在的做法

.lrdiv{display:flex;}
.ldiv,.rdiv
{
 flex:1;
 text-align:left;
 vertical-align:middle;
 height:2em;
 line-height:2em;
}
.rdiv
{
 text-align:right;
 padding-left:0;
}
.upddiv
{
 text-align:center;
}
#mapJog
{
 padding:0.5em;
 padding-left:80%;
 text-align:right;
 border:1px solid red;
}
<meta name='viewport' content='user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height' />

<div id='mapJog'>
<div class='upddiv'>
&#9650;
</div>
<div class='lrdiv'>
<div class='ldiv'>
&#9668;
</div>
<div class='rdiv'>
&#9658;
</div>
</div>
<div class='upddiv'>
&#9660;

</div>
</div>
此处的目的是在当前位置的左/右/上方/下方 200 米处提供街景 View ,具体取决于单击这些按钮中的哪个按钮。

为了使结果更易于可视化,已保留红色边框。虽然这是我关注的布局,但我担心我没有充分解决能够在不同屏幕尺寸的四个按钮上检测点击事件(想想胖手指)的问题。希望这里有人能够提出改进建议,以确保无论屏幕尺寸如何,这种情况始终发生。

最佳答案

最简单的是使用伪元素扩展元素可点击区域。

(function(w, d, last) {
  w.addEventListener("load", function() {
    
    d.getElementById('mapJog').addEventListener('click', function(e) {
      if(last) {
        last.classList.remove('clicked');
      }
      e.target.classList.add('clicked');
      last = e.target;
    });

  });
}(window, document));
.lrdiv {
  display: flex;
}

.ldiv,
.rdiv {
  flex: 1;
  text-align: left;
  vertical-align: middle;
  height: 2em;
  line-height: 2em;
}

.rdiv {
  text-align: right;
  padding-left: 0;
}

.upddiv {
  text-align: center;
}

#mapJog {
  padding: 0.5em;
  padding-left: 80%;
  text-align: right;
  border: 1px solid red;
}

#mapJog div:not(.lrdiv) {
  position: relative;
  pointer-events: none;
}
#mapJog div:not(.lrdiv)::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%,-50%);
  width: 100%;
  height: 150%;
  border-radius: 50%;
  border: 1px solid red;  
  pointer-events: auto;
}
#mapJog div.upddiv::after {
  width: 50%;
  height: 220%;
}
#mapJog div.ldiv::after {
  left: 20%;
}
#mapJog div.rdiv::after {
  left: 80%;
}
#mapJog div.clicked:not(.lrdiv)::after {
  background: yellow;
  z-index: -1;
}
<meta name='viewport' content='user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height' />

<div id='mapJog'>
  <div class='upddiv'>
    &#9650;
  </div>
  <div class='lrdiv'>
    <div class='ldiv'>
      &#9668;
    </div>
    <div class='rdiv'>
      &#9658;
    </div>
  </div>
  <div class='upddiv'>
    &#9660;
  </div>
</div>

关于css - 更灵敏的街景主方向按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44907897/

相关文章:

html - IFrame响应问题

html - 顶部和底部边距相同的 div(无 %)

php - 使用 WP_Query 显示来自 Wordpress 废墟页面 CSS 的内容,没有,内容不显示

flexbox - 聚合物铁柔性布局类不起作用

css - Bootstrap 4/Flexbox IE11 错误

javascript - Firefox 刷新故障

javascript - 更改 css 样式并使用 jQuery 附加文本

css - 无法使用 css flexbox 设置元素样式

html - 如何使用 CSS flexbox 设置固定宽度的列

html - 一个 flex/网格元素设置 sibling 的大小限制