17.05.2017, 21:18
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 157
|
|
Определить позицию элемента в момент перетаскивания
Добрый вечер! Обращаюсь за помощью, потому как гугл мне не помог(
У меня на странице есть объект с абсолютной позицией и left:0. Я перемещаю его курсором по горизонтали, по средствам draggable. То есть фактически изменяю значения left. Подскажите пожалуйста как я могу получать значения left в момент перетаскивания?
|
|
17.05.2017, 22:22
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
smart-create,
draggable jquery?
|
|
17.05.2017, 22:34
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 157
|
|
да, да совершенно верно.
<script src="assets/js/jquery-ui.min.js"></script>
<script>
$('.scrollX').draggable({
axis: "x"
})
</script>
|
|
17.05.2017, 23:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
smart-create,
в документации даже пример есть того, что вы просите
http://api.jqueryui.com/draggable/#event-drag
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#draggable { width: 150px; height: 150px; padding: 0.5em; }
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script>
$(function() {
$( "#draggable" ).draggable({ axis: "x",
drag: function( event, ui ) {
$( "#draggable" ).html(ui.offset.left); // ui.position.left
}
});
});
</script>
</head>
<body>
<div id="draggable" class="ui-widget-content">
<p>Drag me around</p>
</div>
</body>
</html>
|
|
18.05.2017, 01:08
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 157
|
|
Точно.., прошу прощения, я уже 18 часов в js с головой, видимо мозг закоптило, я не заметил. Спасибо
Если Вас не затруднит хотел бы попросить посмотреть на плод моей работы за день. Я основываясь на этой теме сделал на странице "лже" скрол, то есть стандартный скрыл, создал обобьет равный по размеру полосе прокрутки и скриптами связал его положение с прокруткой страницы, что бы можно было стилизовать скролл кросбраузерно.
Я все это сделал но получилось не совсем "правильно", я бы даже сказал кривовато. Было бы здорово если бы вы взглянули на плод моей дневной работы и указали на те места где я допустил ошибки.
Ссылка на страницу
Мой "лже" скррол - горизонтальная полоса прокрутки в низу страницы, сиреневая со скругленными углами
Скрипты которые я использовал:
$window.on('load', function() {
var $width = $(document).width() / $(window).width(),
$coef_widht = $(window).width() / $width,
$scroll = $(document).scrollLeft();
$('.scrollX').css({
width: $coef_widht,
left: $scroll + $(window).width() / ($(document).width() / $scroll)
});
$(document).scroll(function() {
var $scroll = $(document).scrollLeft();
$('.scrollX').css({
width: $coef_widht,
left: $scroll + $(window).width() / ($(document).width() / $scroll)
});
})
$('.scrollX').draggable({
axis: "x",
containment: "html",
drag: function( event, ui ) {
$(document).scrollLeft(ui.offset.left - $(window).width() / ($(document).width() / ui.offset.left));
}
)
});
P.S. Заранее благодарен
P.P.S Готовые плагины для этой задачи не использовал по нескольким причинам - не хочу утяжелять вес страницы, плагины что я находил плохо работаю с горизонтальной прокруткой, хочу разобраться в этой теме сам
|
|
18.05.2017, 10:25
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 157
|
|
Утром встал с более имение ясной головой, переписал немного код, получилось вот так (может быть не совсем правильно с точки зрения красоты кода, но работает адекватно):
$window.on('load', function() {
var $width = $(document).width() / $(window).width(),
$coef_widht = $(window).width() / $width,
$scroll = $(document).scrollLeft();
$('.scrollX').css({
width: $coef_widht,
left: $scroll + $(window).width() / ($(document).width() / $scroll)
});
$(document).scroll(function() {
$scroll = $(document).scrollLeft();
$('.scrollX').css({
width: $coef_widht,
left: $scroll + $(window).width() / ($(document).width() / $scroll)
});
})
$('.scrollX').draggable({
axis: "x",
containment: "html",
drag: function( event, ui ) {
$scroll = $(document).scrollLeft();
$(document).scrollLeft(ui.offset.left - (($scroll / $(window).width()) * $coef_widht ));
}
})
});
Я сказал что работает адекватно, но не везде, в мозиле проблемы, на сколько я понял проблемы уже не в моем скрипте, а в самой draggable jquery в мозиле. Сразу после загрузки страницы координата определяются правильно, но стоит проскролить страницу - координата начинает прибавлять к правильному значению сотни а потом и тысячи пикселей...
Есть ли какой то способ обойти эту проблему?
|
|
18.05.2017, 10:47
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
|
|
19.05.2017, 01:20
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 157
|
|
Спасибо! Сделал все так как Вы показали в одном из примеров. В мозиле скрол стал работать корректно, по отношению к тому что было раньше. А сейчас ползунок скрола просто перестает бегать за нами в момент прокручивания страницы вниз ( то есть в моем случае вправо), а если прокручивать вверх (у меня влево), то все ок.
Смотрел на код уже больше 6 часов и не могу понять как мне исправить эту ошибку, Помогите пожалуйста
P.S. На всякий случай, еще ращ прикрепляю ссылку:
http://ru-marketroll.myjino.ru/oleg/
|
|
19.05.2017, 04:11
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
горизонтальный скролл колёсиком мыши минимальная версия
smart-create,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script>
$(function() {
var a = p = 50,
b = $(window).width() - p - $(".slider").width();
$(".scroll-bar").slider({
max: p,
min: b,
value: b,
slide: function(k, d) {
a = b - d.value + p;
$(".slider").css({
left: a
})
}
});
$(window).on("mousewheel DOMMouseScroll", function(c) {
c.preventDefault();
a += c.originalEvent.wheelDelta || 40 * -c.originalEvent.detail;
a > p && (a = p);
a < b && (a = b);
$("p").html(b - a);
$(".scroll-bar").slider("option", "value", b - a + p);
$(".slider").stop().animate({
left: a
}, 600)
}).on("resize", function() {
a = p;
b = $(window).width() - p - $(".slider").stop().animate({
left: a
},
600).width();
$(".scroll-bar").slider("option", "min", b);
$(".scroll-bar").slider("option", "value", b)
})
});
</script>
<style type="text/css">html,body{
height:100%;
}
body{
overflow:hidden;
position:relative;
}
.slider{
left:50px;
position:absolute;
height:200px;
width:2990px;
background-color:hsla(51,100%,50%,1);
}
.slider img{
height:200px;
padding:0;
}
.scroll-bar{
position:absolute;
left:0;
top:calc(100vh - 16px);
width:calc(100vw - 60px);
}
.ui-slider-horizontal{
height:0px;
}
.ui-slider-horizontal .ui-slider-handle{
top:-4px;
background:#0000FF;
width:56px;
border-radius:8px;
height:8px;
}
:focus{
outline:0;
border:0;
}
</style>
</head>
<body>
<div class="slider">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
<img src="http://static.panoramio.com/photos/large/45836660.jpg" alt="">
</div>
<div class="scroll-bar"></div>
</body>
</html>
Последний раз редактировалось рони, 19.05.2017 в 10:20.
|
|
|
|