АРМАДА
Проблема со слайдером (javascript)
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

eboooka
Свой
Зарегистрирован: 01.02.2013
Сообщений: 1
Обратиться по нику
# Добавлено:Пт Фев 01, 2013 11:40 pmДобавить в избранноеОтветить с цитатой
Всем доброго времени суток.
В общем, есть слайдер (на домен не обращайте внимание, просто надо было на какой нибудь из сайтов залить в 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) };
}



Буду признателен за помощь!

sawm
V.I.P.
Зарегистрирован: 16.01.2008
Сообщений: 3108
Обратиться по нику
# Добавлено:Вс Фев 03, 2013 1:55 amОтветить с цитатой
наверное нужно было отписать на форум где люди пишут на жс?
Stimul Cash - лучшее решение для фармы! Smile Все остальные нервно курят в сторонке. Wink
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры