JavaScript и SVG: как вы увеличиваете кликабельную область для события onClick? - PullRequest
7 голосов
/ 02 февраля 2012

Мой сценарий рисует линии на экране с шириной обводки 3. Размер линий идеален (визуально), но их не очень легко нажимать.

В качестве грубого примера:

<html>
<head>
<script>
function selectStrand(evt) {
    current_id = evt.target.getAttributeNS(null, "id");

    document.getElementById('main').innerHTML = current_id;
}
</script>
</head>

<body>
Selected line: <span id="main"></span>

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" preserveAspectRatio="xMinYMin meet" viewBox="0 0 1000 1000">
    <g id="buffer" transform="translate(10,0)">
      <line id="blue-blue" x1="50" y1="50" x2="500" y2="50" style="stroke:blue; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-orange" x1="50" y1="70" x2="500" y2="70" style="stroke:orange; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-green" x1="50" y1="90" x2="500" y2="90" style="stroke:green; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-brown" x1="50" y1="110" x2="500" y2="110" style="stroke:brown; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-grey" x1="50" y1="130" x2="500" y2="130" style="stroke:grey; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-khaki" x1="50" y1="150" x2="500" y2="150" style="stroke:khaki; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-red" x1="50" y1="170" x2="500" y2="170" style="stroke:red; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-black" x1="50" y1="190" x2="500" y2="190" style="stroke:black; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-yellow" x1="50" y1="210" x2="500" y2="210" style="stroke:yellow; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-purple" x1="50" y1="230" x2="500" y2="230" style="stroke:purple; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-pink" x1="50" y1="250" x2="500" y2="250" style="stroke:pink; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
      <line id="blue-cyan" x1="50" y1="270" x2="500" y2="270" style="stroke:cyan; stroke-width: 4;" stroke-linecap="round" onclick="selectStrand(evt)"/>
    </g>
  </g>
</svg>

</body>
</html>

Есть ли простой способ увеличить площадь вокруг каждой из линий, чтобы их было легче нажимать?

Ответы [ 2 ]

10 голосов
/ 02 февраля 2012

Для каждой линии попробуйте нарисовать поверх нее прозрачную линию с большей шириной обводки и установите на нее щелчок.

0 голосов
/ 03 февраля 2012

вариант ответа выше.Для получения эффекта крутого выделения сгруппируйте каждую тонкую линию и комбинацию прозрачной линии в группу с тонкой линией вверху.Установите onclick для группы, а затем анимируйте прозрачность жирной линии в вашем onclick.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...