Эмуляция подвижного разделителя: необходимо отключить перетаскивание по умолчанию - PullRequest
1 голос
/ 09 ноября 2011

Я использую html5 + css3 + javascript для создания приложений с графическим интерфейсом. Я пытаюсь подражать структуре, где вдова разделена на две секции с подвижной панелью в середине. Когда пользователь перетаскивает панель, ожидается, что панель будет следовать за курсором мыши, изменяя размер двух секций с двух сторон. До сих пор я придумал следующий код.

<html>
  <head>
    <style>
      .container {
        display : inline-block;
        height : 500px;
      }
      .pane {
        display : inline-block;
        width : 10px;
        height : 100%;
        vertical-align : top;
        color : #806000;
        background-color : #b0d0c0;
      }
      .resbox {
        display : inline-block;
        width : 200px;
        height : 100%;
        background-color : #707070;
      }
    </style>
    <script async="true">
      function dragStart(e, left, right){
        mousedown = true;
        x = e.clientX
        dragOffsetLeft = document.getElementById(left).offsetWidth - x;
        dragOffsetRight = document.getElementById(right).offsetWidth + x;
      };
      function dragRelease(){
        mousedown = false;
      };
      function drag(e, left, right){
        if(!mousedown){return}
        x = e.clientX
        tmpLeft = dragOffsetLeft + x
        tmpRight = dragOffsetRight - x
        if(tmpLeft < 30 || tmpRight < 30){return}
        document.getElementById(left).style.width = tmpLeft + 'px';
        document.getElementById(right).style.width = tmpRight + 'px';
      };
    </script>
  </head>
  <body>
    <span class="container">
      <span id="left" class="resbox">Left</span>
      <span class="pane" onmousedown="dragStart(event, 'left', 'right');" onmousemove="drag(event, 'left', 'right');" onmouseout="dragRelease();" onmouseup="dragRelease();"></span>
      <span id="right" class="resbox">Right</span>
    </span>
  </body>
</html>

Иногда это работает, но в других случаях (особенно после того, как я однажды выполнил перетаскивание панели), панель посередине перетаскивается из положения, как рисунок, и предполагаемая функция блокируется. Я добавил следующее в <script>...</script>, но это не помогло.

      window.onload = function(){
        document.getElementsByClassName('pane')[0].draggable = false;
      };

Могу ли я предложить варианты отключения перетаскивания по умолчанию? Я использую Firefox 7.0.1 и Chrome 15.0.874.106. Есть ли какие-либо другие моменты, которые можно сделать в этом коде, чтобы сделать движение более стабильным и плавным?

1 Ответ

1 голос
/ 09 ноября 2011

Во-первых, чтобы остановить выделение текста при перетаскивании разделителя:

onmousedown="dragStart(event, 'left', 'right'); return false;"
// Returning false stops the default dragging

Это все равно не работает, когда курсор перемещается слишком быстро.Это потому, что разделитель слишком тонкий, и курсор может выйти из него быстрым движением.

Я сделал быстрый обходной путь для этого здесь: http://jsfiddle.net/np56t/1/

Я бы предложил использовать jQuery UI Draggable , чтобы сделать это правильно.

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