拖动面板以显示 div 和 jQuery。这太痛苦了
Dragging a panel to reveal a div with jQuery. It's killing me
我继承了一个 wordpress 网站,正在尽我最大的努力整合新设计师的一些功能。其中之一是拖出面板,用户可以在其中单击一个小图标并左右拖动。我以前从未做过拖动类型的效果,并且有点跌跌撞撞地写了一个我觉得应该有效但无效的小脚本。这是我的脚本。用户应该拖动一个图标,该图标在幕后添加到其父级的 margin-left 属性 div。这应该意味着用户看到将 div 拖到视图中的效果。在开始时,div 被推离屏幕,我的左边距为 -1100px。:
var dragging = false;
var start;
$(document).on('mousedown', function(e){
if ($(e.target).is('.dragme')) {
dragging = true;
start = 0 - e.pageX;
}
});
$(document).on('mouseup', function(){
dragging = false;
start = 0;
});
const offset = $('.dragme').offset().left;
$(document).on('mousemove', function(e){
if (!dragging) {
return;
}
else {
let move = start + e.pageX;
let margin = parseInt($('#section4 .overlay').css('margin-left').replace(/[^-\d\.]/g, ''));
$('#section4 .overlay').css('margin-left', (margin + move) + 'px');
}
});
和我的 dragme 图片 css:
.dragme {
cursor: move;
position: absolute;
right: 0;
top: 50%;
z-index: 20000;
transform: translateY(-50%);
}
现在我的代码允许用户单击图像并拖动,但您看不到正在发生的效果,因此在他们放手之前您不会看到 div 重新定位。此外,mouseup 事件没有触发,所以在用户再次拖动并移动鼠标后,div 变得非常疯狂,因为拖动仍然是正确的。知道我做错了什么吗?另外,请不要推荐我使用 jQuery draggable 或其他一些库。我不想给这个网站添加更多的膨胀。
我不确定你的代码哪里出错了,但无论如何使用我的 Codepen.
$(function() {
var $win = $(window),
$overlay = $('.overlay'),
dragging = false,
start = 0,
defaultMargin = +$overlay.css('margin-left').replace(/[^-\d\.]/g, '');
$win.on('mousedown', function(e) {
if ($(e.target).is('.dragme')) {
dragging = true;
start = e.pageX;
}
});
$win.on('mouseup', function(e) {
dragging = false;
start = e.pageX;
defaultMargin = +$overlay.css('margin-left').replace(/[^-\d\.]/g, '');
});
$win.on('mousemove', function(e) {
if(!dragging) return false;
var move = e.pageX - start;
$overlay.css({marginLeft: defaultMargin + move + 'px'});
});
});
.overlay {
position: absolute;
width: 90%;
height: 100px;
margin-left: -200px;
background-color: green;
}
.dragme {
width: 20px;
height: 20px;
background-color: yellow;
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="overlay">
<div class="dragme"></div>
</div>
我继承了一个 wordpress 网站,正在尽我最大的努力整合新设计师的一些功能。其中之一是拖出面板,用户可以在其中单击一个小图标并左右拖动。我以前从未做过拖动类型的效果,并且有点跌跌撞撞地写了一个我觉得应该有效但无效的小脚本。这是我的脚本。用户应该拖动一个图标,该图标在幕后添加到其父级的 margin-left 属性 div。这应该意味着用户看到将 div 拖到视图中的效果。在开始时,div 被推离屏幕,我的左边距为 -1100px。:
var dragging = false;
var start;
$(document).on('mousedown', function(e){
if ($(e.target).is('.dragme')) {
dragging = true;
start = 0 - e.pageX;
}
});
$(document).on('mouseup', function(){
dragging = false;
start = 0;
});
const offset = $('.dragme').offset().left;
$(document).on('mousemove', function(e){
if (!dragging) {
return;
}
else {
let move = start + e.pageX;
let margin = parseInt($('#section4 .overlay').css('margin-left').replace(/[^-\d\.]/g, ''));
$('#section4 .overlay').css('margin-left', (margin + move) + 'px');
}
});
和我的 dragme 图片 css:
.dragme {
cursor: move;
position: absolute;
right: 0;
top: 50%;
z-index: 20000;
transform: translateY(-50%);
}
现在我的代码允许用户单击图像并拖动,但您看不到正在发生的效果,因此在他们放手之前您不会看到 div 重新定位。此外,mouseup 事件没有触发,所以在用户再次拖动并移动鼠标后,div 变得非常疯狂,因为拖动仍然是正确的。知道我做错了什么吗?另外,请不要推荐我使用 jQuery draggable 或其他一些库。我不想给这个网站添加更多的膨胀。
我不确定你的代码哪里出错了,但无论如何使用我的 Codepen.
$(function() {
var $win = $(window),
$overlay = $('.overlay'),
dragging = false,
start = 0,
defaultMargin = +$overlay.css('margin-left').replace(/[^-\d\.]/g, '');
$win.on('mousedown', function(e) {
if ($(e.target).is('.dragme')) {
dragging = true;
start = e.pageX;
}
});
$win.on('mouseup', function(e) {
dragging = false;
start = e.pageX;
defaultMargin = +$overlay.css('margin-left').replace(/[^-\d\.]/g, '');
});
$win.on('mousemove', function(e) {
if(!dragging) return false;
var move = e.pageX - start;
$overlay.css({marginLeft: defaultMargin + move + 'px'});
});
});
.overlay {
position: absolute;
width: 90%;
height: 100px;
margin-left: -200px;
background-color: green;
}
.dragme {
width: 20px;
height: 20px;
background-color: yellow;
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="overlay">
<div class="dragme"></div>
</div>