Показать сообщение отдельно
  #4 (permalink)  
Старый 16.09.2012, 03:46
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

<!DOCTYPE HTML>
<html>
<head>
  
<style>

#s1, #s2, #s3 {
  border-radius: 5px;
  background: #E0E0E0;
  background: -moz-linear-gradient(left top , #E0E0E0, #EEEEEE) repeat scroll 0 0 transparent;
  background: -webkit-gradient(linear, left top, right bottom, from(#E0E0E0), to(#EEEEEE));
  background: linear-gradient(left top, #E0E0E0, #EEEEEE);
  width: 310px;
  height: 15px;
  margin: 15px;
}
#p1, #p2, #p3 {
  width: 10px;
  height: 25px;
  border-radius: 3px;
  position: relative;
  left: 10px;
  top: -5px;
  background: blue;
  cursor: pointer;
}
</style>

</head>
  <body>

    <div id="s1">
        <div id="p1"></div>
    </div>
    
    <div id="s2">
        <div id="p2"></div>
    </div>
    
    <div id="s3">
        <div id="p3"></div>
    </div>

  <script>
    function func() {

        func.sliders = function(event) {
          var self = this;
          var parent = this.parentNode; // контейнер ползунка
          var thumbCoords = this.getBoundingClientRect();
          var shiftX = event.pageX - thumbCoords.left;


          var sliderCoords = parent.getBoundingClientRect();

          document.onmousemove = function(event) {

            var newLeft = event.pageX - shiftX - sliderCoords.left;

            if (newLeft < 0) {
                newLeft = 0;
            }
            var rightEdge = parent.offsetWidth - self.offsetWidth;
            if (newLeft > rightEdge) {
                newLeft = rightEdge;
            }

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

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

    document.getElementById("p1").onmousedown = func.sliders; 
    document.getElementById("p2").onmousedown = func.sliders; 
    document.getElementById("p3").onmousedown = func.sliders;
      
    }
    
    func();

      

  </script>  
  </body>
</html>



Работает!

В чем была ошибка:

Если вложенная функция вызывается как функция, то значением this будет либо глобальный объект (в нестрогом режиме), либо undefined (в строгом режиме).
Соответственно, если переменной присвоить значение this в родительской функции, то можно манипулировать этой переменной и соответственно this во вложенных функциях!
Ответить с цитированием