鼠标拖动定位问题,求解决,谢谢

nitaiyoucala 2018-05-15 05:29:05

问题:我去掉id为“divTest"的那个div 下面鼠标拖动时间选择能正常使用。加这个div下面鼠标拖动选择定位就不正常了(目测是有了滚动条有就不行了)。求解决?

全部代码,复制过去直接可以运行


<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
var initSelectBox = function (selector, selectCallback) {
function clearBubble(e) {
if (e.stopPropagation) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
}
var $div_container = $(selector);
//框选事件
$div_container
.on('mousedown', function (eventDown) {
var isSelect = true;
var $selectBoxDashed = $('<div class="select-box-dashed"></div>');
$('body').append($selectBoxDashed);
var startX = eventDown.x || eventDown.clientX;
var startY = eventDown.y || eventDown.clientY;

$selectBoxDashed.css({
left: startX,
top: startY
});

var _x = null;
var _y = null;
clearBubble(eventDown);
$(selector).on('mousemove', function (eventMove) {
$selectBoxDashed.css('display', 'block');
_x = eventMove.x || eventMove.clientX;
_y = eventMove.y || eventMove.clientY;
var _left = Math.min(_x, startX);
var _top = Math.min(_y, startY);
var _width = Math.abs(_x - startX);
var _height = Math.abs(_y - startY);
$selectBoxDashed.css({
left: _left,
top: _top,
width: _width,
height: _height
});
$(selector).find('.select-item').each(function () {
var $item = $(this);
var itemX_pos = $item.prop('offsetWidth') + $item.prop('offsetLeft');
var itemY_pos = $item.prop('offsetHeight') + $item.prop('offsetTop');
// 判断 select-item 是否与选框有交集,添加选中的效果( temp-selected ,在事件 mouseup 之后将 temp-selected 替换为 selected)
var condition1 = itemX_pos > _left;
var condition2 = itemY_pos > _top;
var condition3 = $item.prop('offsetLeft') < (_left + _width);
var condition4 = $item.prop('offsetTop') < (_top + _height);
if (condition1 && condition2 && condition3 && condition4) {
$item.addClass('temp-selected');
} else {
$item.removeClass('temp-selected');
}
});
clearBubble(eventMove);
});

$(document).on('mouseup', function () {
$(selector).off('mousemove');
$(selector)
.find('.select-item.temp-selected')
.removeClass('temp-selected')
.addClass('selected');
$selectBoxDashed.remove();

if (selectCallback) {
selectCallback();
}
});
})
//点选切换选中事件
.on('click', '.select-item', function () {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
$(this).addClass('selected');
}
})
//点选全选全不选
.on('click', '.toggle-all-btn', function () {
if ($(this).attr('data-all')) {
$(this).removeAttr('data-all');
$div_container.find('.select-item').removeClass('selected');
} else {
$(this).attr('data-all', 1);
$div_container.find('.select-item').addClass('selected');
}
});
};
</script>
<script type="text/javascript">
$(function () {
initSelectBox('.div_container');
})
</script>
<style type="text/css">
.div_container {
padding: 0px;
margin: 0px 0px 0px;
border: 0px solid #ddd;
text-align: center;
width: 832px;
overflow: hidden;
border-right: 1px solid #ddd;
border-bottom: 1px solid #ddd;
}

.select-item {
display: inline-block;
float: left;
width: 33px;
height: 22px;
text-align: center;
line-height: 22px;
font-size: 12px;
border-left: 1px solid #DDDDDD;
border-top: 1px solid #DDDDDD;
cursor: pointer;
background: #49B9E3;
color: #797979;
}

.select-item.selected,
.select-item.temp-selected {
background-color: #fff;
}

.select-item-head {
float: left;
width: 33px;
height: 22px;
text-align: center;
line-height: 22px;
font-size: 12px;
border-left: 1px solid #DDDDDD;
border-top: 1px solid #DDDDDD;
cursor: pointer;
color: #797979;
}

.head_left {
width: 49px;
}

.select-box-dashed {
position: absolute;
display: none;
width: 0px;
height: 0px;
padding: 0px;
margin: 0px;
border: 1px dashed #0099ff;
background-color: #c3d5ed;
opacity: 0.5;
filter: alpha(opacity=50);
font-size: 0px;
z-index: 99999;
}
</style>
</head>
<body>
<div id="divTest" style="height: 800px; background:#ddd;font-size:30px; text-align: center; line-height: 800px; ">加了这个div下面鼠标拖动选择时间就不能用了,我看是定位问题,求解决</div>
<p /> 鼠标拖动选择时间:<br />
<div class="div_container">
<div class="select-item-head head_left">时间</div>
<div class="select-item-head">1</div>
<div class="select-item-head">2</div>
<div class="select-item-head">3</div>
<div class="select-item-head">4</div>
<div class="select-item-head">5</div>
<div class="select-item-head">6</div>
<div class="select-item-head">7</div>
<div class="select-item-head">8</div>
<div class="select-item-head">9</div>
<div class="select-item-head">10</div>
<div class="select-item-head">11</div>
<div class="select-item-head">12</div>
<div class="select-item-head">13</div>
<div class="select-item-head">14</div>
<div class="select-item-head">15</div>
<div class="select-item-head">16</div>
<div class="select-item-head">17</div>
<div class="select-item-head">18</div>
<div class="select-item-head">19</div>
<div class="select-item-head">20</div>
<div class="select-item-head">21</div>
<div class="select-item-head">22</div>
<div class="select-item-head">23</div>
<div class="select-item-head head_left">星期一</div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item-head head_left">星期二</div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>
<div class="select-item"></div>

</div>
</body>
</html>

...全文
868 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
2018-05-16
  • 打赏
  • 举报
回复
都改成pageX, pageY

var startX = eventDown.pageX;
var startY = eventDown.pageY;

_x = eventMove.pageX;
 _y = eventMove.pageY;
nitaiyoucala 2018-05-16
  • 打赏
  • 举报
回复
求大牛修改,谢谢

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧