Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery可通过滚动选择,修复取消选择行为_Javascript_Jquery_User Interface - Fatal编程技术网

Javascript jquery可通过滚动选择,修复取消选择行为

Javascript jquery可通过滚动选择,修复取消选择行为,javascript,jquery,user-interface,Javascript,Jquery,User Interface,我正在对JQuery UI进行修改,允许它使用可滚动的源元素: 这非常适合创建具有多选功能的表单选择元素!也就是说,我遇到了一个我似乎无法解决的取消选择行为。这也存在于许多其他可选演示中 /** *拉斯洛·卡罗利原创 * https://codepen.io/valerybugakov/details/WvGBQV */ /*全局jQuery*/ (函数($){ "严格使用",; $.widget('ui.selectableScroll',$.ui.selectable{ 选项:{ //如果

我正在对JQuery UI进行修改,允许它使用可滚动的源元素:

这非常适合创建具有多选功能的表单选择元素!也就是说,我遇到了一个我似乎无法解决的取消选择行为。这也存在于许多其他可选演示中

/**
*拉斯洛·卡罗利原创
* https://codepen.io/valerybugakov/details/WvGBQV
*/
/*全局jQuery*/
(函数($){
"严格使用",;
$.widget('ui.selectableScroll',$.ui.selectable{
选项:{
//如果在这里传递了一个元素,则使用它来滚动,而不是小部件的元素
scrollElement:null,
//当选择接近上/下边缘的像素时,开始滚动
滚动快照:40,
//选择靠近侧边的像素时,开始滚动
斯内皮:40,
滚动量:25,//以像素为单位
scrollIntervalTime:100//毫秒
},
/**
*这是对原始的_create函数稍加修改的版本,
*我们也只是添加元素的相对位置
*
*@returnnull
*/
_创建:函数(){
this.element.addClass('ui-selective');
this.draw=false;
this.helperClasses=['no-top'、'no-right'、'no-bottom'、'no-left'];
this.scrollElement=this.options.scrollElement | | this.element;
这个。刷新();
这个;
this.helper=$('');
},
/**
*基于筛选器缓存selectee子级
*@returnnull
*/
刷新:函数(){
var elementOffset=this.scrollElement.offset();
var scrollLeft=this.scrollElement.prop('scrollLeft');
var scrollTop=this.scrollElement.prop('scrollTop');
this.selectees=$(this.options.filter,this.scrollElement[0]);
this.selectees.addClass('ui-selectee');
this.selectees.each(函数(){
var$element=$(此),
pos=$element.offset();
$.data(此“可选项”{
要素:这个,,
$element:$element,
左:位置左,
顶部:位置顶部,
右:pos.left+$element.outerWidth(),
底部:pos.top+$element.outerHeight(),
//根据元素的0.0的相对位置
亲属:{
左:位置左-元素偏移量左+滚动左,
顶部:位置顶部-元素偏移量顶部+滚动顶部,
右:位置左-元素偏移量左+滚动左+
$element.outerWidth(),
底部:位置顶部-元素偏移量顶部+滚动顶部+
$element.outerHeight()
},
startselected:false,
选中:$element.hasClass('ui-selected'),
选择:$element.hasClass('ui-selecting'),
取消选择:$element.hasClass('ui-unselecting')
});
});
},
/**
*通过开始拖动,计算元素的当前滚动状态,
*相对于图元的0.0偏移
*
*@param对象mousedown事件
*@return boolean父级的_mouseStart返回值
*/
_mouseStart:函数(事件){
//log(this.scrollElement.prop('scrollToTop'))
var pos=this.scrollElement.offset();
如果(
(event.pageX>this.scrollElement.prop('clientWidth')+pos.left)||
(event.pageY>this.scrollElement.prop('clientHeight')+pos.top)
) {
返回false;
}
var retValue=$.ui.selective.prototype.\u mouseStart.call(此,
事件);
this.lastDragEvent=null;
this.scrollInfo={
//与文档元素相关的元素的0.0偏移量
elementOffset:this.scrollElement.offset(),
//最大可滚动宽度(可见宽度+向左滚动)
scrollWidth:this.scrollElement.prop('scrollWidth'),
//最大可滚动高度(可见高度+滚动顶部)
scrollHeight:this.scrollElement.prop('scrollHeight'),
//可见宽度(减去滚动条)
elementWidth:this.scrollElement.prop('clientWidth'),
//可见高度(减去滚动条)
elementHeight:this.scrollElement.prop('clientHeight'))
};
//相对于元素的0
this.scrollInfo.dragStartXPos=event.pageX-this.scrollInfo.elementOffset
.left+这个.scrollElement.prop('scrollLeft');
//相对于元素的0
this.scrollInfo.dragStartYPos=event.pageY-this.scrollInfo.elementOffset
.top+this.scrollElement.prop('scrollTop');
this.scrollIntervalId=null;
返回值;
},
/**
*计算/重画辅助套索,将辅助套索保持在
*滚动元素
*
*@param object包含选定矩形相对位置的选项对象
*@returnnull
*/
_updateHelper:函数(选项){
var x1,y1,x2,y2;//套索辅助对象的绝对位置
var lassoclassearray=[];
如果(options.x1-options.scrollLeft<0){
Lassoclasssarray.push('no-left');
x1=this.scrollInfo.element offset.left;
}否则{
x1=this.scrollInfo.elementOffset.left+options.x1-options.scrollLeft;
}
if(options.y1-options.scrollTop<0){
Lassoclasssarray.push('no-top');
y1=this.scrollInfo.elementOffset.top;
}否则{
y1=this.scrollInfo.elementOffset.top+options.y1-options.scrollTop;
}
if(options.x2-options.scrollLeft>this.scrollInfo.elementWidth){
Lassoclasssarray.push('no-right');
x2=this.scrollInfo.elementOffset.left+this.scrollInfo.elementWidth;
}否则{
x2=this.scrollInfo.elementOffset.left+options.x2-options.scrollLeft;
}
if(options.y2-options.scrollTop>this.scrollInfo.elementHeight){
拉索拉萨雷