Проблема со слайдером (javascript)
Новая тема Написать ответ
# Пт Фев 01, 2013 11:40 pmeboooka Зарег.: 01.02.2013 ; Сообщ.: 1Ответить с цитатой
Всем доброго времени суток.
В общем, есть слайдер (на домен не обращайте внимание, просто надо было на какой нибудь из сайтов залить в ftp страницу, дабы все смогли увидить и почувствовать всю соль проблемы), работает подобно разблокировке айфона, однако, если курсор выходит за пределы темного фона (.slider) при нажатии на ползунок, он (.thumb), при отпускании мыши, не возвращается на место.

Вот сам код:

Из end.html
Код:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="lib.js"></script>
  <style>
    .slider {
      border-radius: 6px;
      background: url('background-btn.png');
      background: -moz-linear-gradient(left top , url('background-btn.png'), url('background-btn.png')) repeat scroll 0 0 transparent;
      background: -webkit-gradient(linear, left top, right bottom, from(url('background-btn.png')), to(url('background-btn.png')));
      background: linear-gradient(left top, url('background-btn.png'), url('background-btn.png'));
      width: 200px;
      height: 37px;
    }
    .thumb {
      width: 50px;
      height: 33px;
      border-radius: 4px;
      position: relative;
      left: 2px;
     top: 2px;
      background: url('polzunok.png');
      cursor: pointer;
    }
  </style>
</head>
<body>

<div id="slider" class="slider">
  <div class="thumb" onMouseUp="this.style.left='2px'"></div>
</div>

<script language="JavaScript">

var sliderElem = document.getElementById('slider');
var thumbElem = sliderElem.children[0];

thumbElem.ondragstart = function() { return false; };
thumbElem.onmousedown = function(e) {
  e = fixEvent(e);
  var thumbCoords = getCoords(thumbElem);
  var shiftX = e.pageX - thumbCoords.left;
  var shiftY = e.pageY - thumbCoords.top;

  var sliderCoords = getCoords(sliderElem);

  document.onmousemove = function(e) {
    e = fixEvent(e);

    //  вычесть координату родителя, т.к. position: relative
    var newLeft = e.pageX - shiftX - sliderCoords.left;

    // курсор ушёл вне слайдера
    if (newLeft < 0) {
      newLeft = 0;
    }
    var rightEdge = sliderElem.offsetWidth - thumbElem.offsetWidth;
    if (newLeft > rightEdge) {
      newLeft = rightEdge;
    }

    thumbElem.style.left = newLeft + 'px';
  }

  document.onmouseup = function() {
    document.onmousemove = document.onmouseup = null;
  };

  return false; // disable selection start (cursor change)
};



</script>

</body>
</html>



И из lib.js
Код:

function fixEvent(e) {
  e = e || window.event;

  if (!e.target) e.target = e.srcElement;

  if (e.pageX == null && e.clientX != null ) { // если нет pageX..
    var html = document.documentElement;
    var body = document.body;

    e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
    e.pageX -= html.clientLeft || 0;

    e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
    e.pageY -= html.clientTop || 0;
  }

  if (!e.which && e.button) {
    e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : ( e.button & 4 ? 2 : 0 ) )
  }

  return e;
}


function getCoords(elem) {
    var box = elem.getBoundingClientRect();

    var body = document.body;
    var docElem = document.documentElement;

    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;

    var clientTop = docElem.clientTop || body.clientTop || 0;
    var clientLeft = docElem.clientLeft || body.clientLeft || 0;

    var top  = box.top +  scrollTop - clientTop;
    var left = box.left + scrollLeft - clientLeft;

    return { top: Math.round(top), left: Math.round(left) };
}



Буду признателен за помощь!
# Вс Фев 03, 2013 1:55 amsawm Зарег.: 16.01.2008 ; Сообщ.: 3108Ответить с цитатой
наверное нужно было отписать на форум где люди пишут на жс?
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.