Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.08.2012, 01:56
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

Проблема с конструктором слайдера.
Собственно. что я делаю не так? Первые два слайдера не работают. Спотыкается все на path, вроде.

<!DOCTYPE html>
<style>
body {
   padding-left: 40px;
}

#knobId {
   background-color: #7f9;
}
</style>
<body>
<div id='sl1'></div>
<div id='sl2'></div>
<div id='sl3'></div>

</body>
<script type="text/javascript">
function addSlider(width, sliderId) {
   var sliderWidth = width;

   var slider = document.createElement('div')
   slider.id = sliderId + '_sliderId';
   slider.style.width= sliderWidth + 'px';
   slider.style.height= 15 + 'px';
   slider.style.border = '3px solid #777';
   slider.style.position = 'relative';
   document.getElementById(sliderId).appendChild(slider);

   var knob = document.createElement('div');
   knob.id = sliderId +'_knobId'
   knob.className= 'knob'
   knob.style.width = 24 +'px';
   knob.style.height = 15+ 'px';
   knob.style.border= '3px solid black';
   knob.style.position = 'relative';
   knob.style.top= -3 +'px';
   knob.style.left = 0 + 'px';

   slider.appendChild(knob);

   function setValue(x) {
      knob.style.left = x + 'px';
   };

   knob.addEventListener('mousedown', startListen, true)

   var start;
   var end;
   var path;
   document.onmousedown = mouseClick;
   function mouseClick(event){
           start = event.pageX
   }
   document.onmousemove = mouseUp;
   function mouseUp(event){
      end = event.pageX
      path = end-start
   }
   var pos;
   function startListen(e) {
      pos = parseInt(knob.style.left, 10)
      slider.addEventListener('mousemove', changeKnobPos, true);
   };

   function changeKnobPos(e) {
      console.log(sliderId+" "+ path +" "+ pos)
      if (pos + path +29 < sliderWidth && pos + path >=0 ){
         knob.style.left = pos + path +'px';
      }
   }

   document.addEventListener('mouseup', endListen, true)
   function endListen() {
      slider.removeEventListener('mousemove', changeKnobPos, true);
   }
   this.getValue= function() {return parseInt(knob.style.left, 10)};
   this.setValue= function(x) {knob.style.left = x + 'px'};
}
var bb = new addSlider(300, 'sl1');
var gg = new addSlider(400, 'sl2');
var ff = new addSlider(500, 'sl3');

</script>
Ответить с цитированием
  #2 (permalink)  
Старый 27.08.2012, 01:59
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

Перезаписывается document.onmousedown ?
Как обойти тогда?

update
-----------------
Действительно. Решил это так. Чтоб тема даром не висела, расскажите, что я сделал вообще криво и не так?
<!DOCTYPE html>
<style>
body {
   padding-left: 40px;
}

#knobId {
   background-color: #7f9;
}
</style>
<body>
<div id='sl1'></div>
<div id='sl2'></div>
<div id='sl3'></div>

</body>
<script type="text/javascript">
function addSlider(width, sliderId) {
   var sliderWidth = width;

   var slider = document.createElement('div')
   slider.id = sliderId + '_sliderId';
   slider.style.width= sliderWidth + 'px';
   slider.style.height= 15 + 'px';
   slider.style.border = '3px solid #777';
   slider.style.position = 'relative';
   document.getElementById(sliderId).appendChild(slider);

   var knob = document.createElement('div');
   knob.id = sliderId +'_knobId'
   knob.className= 'knob'
   knob.style.width = 24 +'px';
   knob.style.height = 15+ 'px';
   knob.style.border= '3px solid black';
   knob.style.position = 'relative';
   knob.style.top= -3 +'px';
   knob.style.left = 0 + 'px';

   slider.appendChild(knob);

   function setValue(x) {
      knob.style.left = x + 'px';
   };

   knob.addEventListener('mousedown', startListen, true)

   var start;
   var end;
   var path;
   document.getElementById(sliderId).onmousedown = mouseClick;
   function mouseClick(event){
           start = event.pageX
   }
   document.getElementById(sliderId).onmousemove = mouseUp;
   function mouseUp(event){
      end = event.pageX
      path = end-start
   }
   var pos;
   function startListen(e) {
      pos = parseInt(knob.style.left, 10)
      slider.addEventListener('mousemove', changeKnobPos, true);
   };

   function changeKnobPos(e) {
      console.log(sliderId+" "+ path +" "+ pos)
      if (pos + path +29 < sliderWidth && pos + path >=0 ){
         knob.style.left = pos + path +'px';
      }
   }

   document.addEventListener('mouseup', endListen, true)
   function endListen() {
      slider.removeEventListener('mousemove', changeKnobPos, true);
   }
   this.getValue= function() {return parseInt(knob.style.left, 10)};
   this.setValue= function(x) {knob.style.left = x + 'px'};
}
var bb = new addSlider(300, 'sl1');
var gg = new addSlider(400, 'sl2');
var ff = new addSlider(500, 'sl3');

</script>

Последний раз редактировалось PashPP, 27.08.2012 в 02:09.
Ответить с цитированием
  #3 (permalink)  
Старый 27.08.2012, 10:09
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

PashPP, на первый взгляд ООП маловато. Код похож на одну большую свалку. Кстати, конструкторы пишутся с заглавной. Это только мое мнение.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 27.08.2012, 11:52
Профессор
Отправить личное сообщение для PashPP Посмотреть профиль Найти все сообщения от PashPP
 
Регистрация: 26.07.2012
Сообщений: 281

Сообщение от nerv_
ООП маловато
Как это?
Сообщение от nerv_
Код похож на одну большую свалку
Почему?
Ну не на большую же, на маленькую пока что )
Сообщение от nerv_
конструкторы пишутся с заглавной.
Запомню.
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2012, 12:27
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от PashPP
Почему?
потому, что
Сообщение от nerv_
ООП маловато
Сообщение от PashPP
Как это?
Вы создаете объект. У объекта, как правило, должны быть свойства и методы, по средством которых с ним будет осуществляться взаимодействие. То, что относиться непосредственно к созданию объекта, вынесите в процедуру инициализации.
http://learn.javascript.ru/widgets-oop

p.s.: хардкода тоже хватает
Цитата:
var slider = document.createElement('div')
slider.id = sliderId + '_sliderId';
slider.style.width= sliderWidth + 'px';
slider.style.height= 15 + 'px';
slider.style.border = '3px solid #777';
slider.style.position = 'relative';
document.getElementById(sliderId).appendChild(slider);
var knob = document.createElement('div');

knob.id = sliderId +'_knobId'
knob.className= 'knob'
knob.style.width = 24 +'px';
knob.style.height = 15+ 'px';
knob.style.border= '3px solid black';
knob.style.position = 'relative';
knob.style.top= -3 +'px';
knob.style.left = 0 + 'px';
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с обработкой ескольких .hover() anocean jQuery 3 15.06.2012 22:43
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47