|
@@ -1,57 +1,211 @@
|
|
|
-import { cos } from "mathjs";
|
|
|
-
|
|
|
- //定义变量储存div的宽高
|
|
|
- var obj_w, obj_h;
|
|
|
- //定义一个变量判断是否执行移动函数
|
|
|
- var mouseDown = false;
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
/** 多选 */
|
|
|
selectList: [],
|
|
|
selectTabelList: [],
|
|
|
- multipleSelection_1: []
|
|
|
+ multipleSelection_1: [],
|
|
|
+
|
|
|
+ moveSelected: null,
|
|
|
+ moveSelected1: null,
|
|
|
+ flag: false,//是搜开启拖拽的标志
|
|
|
+ oldLeft: 0,//鼠标按下时的left,top
|
|
|
+ oldTop: 0,
|
|
|
+ selectedList: [],//拖拽多选选中的块集合
|
|
|
+
|
|
|
+ isToLeft: true,
|
|
|
+ isToTop: true,
|
|
|
}
|
|
|
},
|
|
|
+ mounted() {
|
|
|
+ this.moveSelected = document.getElementById('moveSelected')
|
|
|
+ this.moveSelected1 = document.getElementById('sm-scroll-box')
|
|
|
+ },
|
|
|
methods: {
|
|
|
- //鼠标按下函数
|
|
|
- downDiv(obj) {
|
|
|
- //获取div的宽高
|
|
|
- obj_w = obj.offsetWidth;
|
|
|
- obj_h = obj.offsetHeight;
|
|
|
- //鼠标
|
|
|
- var e = event || window.event;
|
|
|
- //e.clientX/Y 是获取鼠标相对浏览器的位置;将div中心自动居中到鼠标
|
|
|
-
|
|
|
- let left = (e.clientX - obj_w / 2) + "px";
|
|
|
- let top = (e.clientY - obj_h / 2) + "px";
|
|
|
- console.log('鼠标按下===',mouseDown,left, top)
|
|
|
- //按下时为ture,松开时为false,以判断是否执行执行mouveDiv
|
|
|
- mouseDown = true;
|
|
|
-
|
|
|
+ // 鼠标按下时开启拖拽多选,将遮罩定位并展现
|
|
|
+ mousedownFun(event) {
|
|
|
+ if(event.button != 0) return
|
|
|
+ this.selectedList = []
|
|
|
+ this.selectList = []
|
|
|
+ if(event.srcElement.getAttribute('dragSelectId')){
|
|
|
+ console.log("鼠标开始的的元素=====",event.srcElement)
|
|
|
+ let obj = {
|
|
|
+ Id: event.srcElement.getAttribute('dragSelectId'),
|
|
|
+ index: event.srcElement.getAttribute('dragSelectIndex'),
|
|
|
+ key: event.srcElement.getAttribute('dragSelectKey'),
|
|
|
+ current: event.srcElement.getAttribute('dragSelectCurrent'),
|
|
|
+ }
|
|
|
+ this.selectedList.push(obj)
|
|
|
+ }
|
|
|
+ this.flag=true;
|
|
|
+ let offsetTop = this.moveSelected1.getBoundingClientRect().y
|
|
|
+ let offsetLeft = this.moveSelected1.getBoundingClientRect().x
|
|
|
+ this.moveSelected.style.top=(event.pageY-offsetTop)+'px';
|
|
|
+ this.moveSelected.style.left=(event.pageX-offsetLeft)+'px';
|
|
|
+ this.oldLeft=event.pageX;
|
|
|
+ this.oldTop=event.pageY;
|
|
|
+ event.preventDefault(); // 阻止默认行为
|
|
|
+ event.stopPropagation(); // 阻止事件冒泡
|
|
|
},
|
|
|
-
|
|
|
- //鼠标移动函数
|
|
|
- moveDiv(obj) {
|
|
|
- obj_w = obj.offsetWidth;
|
|
|
- obj_h = obj.offsetHeight;
|
|
|
- var e = event || window.event;
|
|
|
- // console.log(e.clientX, e.clientY);
|
|
|
- // console.log(obj_w, obj_h);
|
|
|
- if (mouseDown) {
|
|
|
- obj.style.left = (e.clientX - obj_w / 2) + "px";
|
|
|
- obj.style.top = (e.clientY - obj_h / 2) + "px";
|
|
|
- console.log('鼠标移动===',obj.style.left, obj.style.top)
|
|
|
- }
|
|
|
-
|
|
|
+ // 鼠标移动时计算遮罩的位置,宽 高
|
|
|
+ mousemoveFun(event) {
|
|
|
+ if(!this.flag) return;//只有开启了拖拽,才进行mouseover操作
|
|
|
+ //console.log("经过的元素=====",event.srcElement)
|
|
|
+ if(event.srcElement.getAttribute('dragSelectId')){
|
|
|
+ let obj = {
|
|
|
+ Id: event.srcElement.getAttribute('dragSelectId'),
|
|
|
+ index: event.srcElement.getAttribute('dragSelectIndex'),
|
|
|
+ key: event.srcElement.getAttribute('dragSelectKey'),
|
|
|
+ current: event.srcElement.getAttribute('dragSelectCurrent'),
|
|
|
+ }
|
|
|
+ this.selectedList.push(obj)
|
|
|
+ }
|
|
|
+ let offsetTop = this.moveSelected1.getBoundingClientRect().y
|
|
|
+ let offsetLeft = this.moveSelected1.getBoundingClientRect().x
|
|
|
+ if(event.pageX<this.oldLeft){//向左拖
|
|
|
+ this.isToLeft = true
|
|
|
+ this.moveSelected.style.left=(event.pageX-offsetLeft)+'px';
|
|
|
+ this.moveSelected.style.width=(this.oldLeft-event.pageX)+'px';
|
|
|
+ }else{
|
|
|
+ this.isToLeft = false
|
|
|
+ this.moveSelected.style.width=(event.pageX-this.oldLeft)+'px';
|
|
|
+ }
|
|
|
+ if(event.pageY<this.oldTop){//向上
|
|
|
+ this.isToTop = true
|
|
|
+ this.moveSelected.style.top=(event.pageY-offsetTop)+'px';
|
|
|
+ this.moveSelected.style.height=(this.oldTop-event.pageY)+'px';
|
|
|
+ }else{
|
|
|
+ this.isToTop = false
|
|
|
+ this.moveSelected.style.height=(event.pageY-this.oldTop)+'px';
|
|
|
+ }
|
|
|
+ event.preventDefault(); // 阻止默认行为
|
|
|
+ event.stopPropagation(); // 阻止事件冒泡
|
|
|
},
|
|
|
-
|
|
|
- //鼠标松开函数
|
|
|
- upDiv(obj) {
|
|
|
- mouseDown = false;
|
|
|
- console.log('鼠标鼠标所开===',mouseDown)
|
|
|
+ //鼠标抬起时计算遮罩的right 和 bottom,找出遮罩覆盖的块,关闭拖拽选中开关,清除遮罩数据
|
|
|
+ mouseupFun(event) {
|
|
|
+ if(event.button != 0) return
|
|
|
+ if(event.srcElement.getAttribute('dragSelectId')){
|
|
|
+ console.log("鼠标结束的的元素=====",event,event.srcElement)
|
|
|
+ let obj = {
|
|
|
+ Id: event.srcElement.getAttribute('dragSelectId'),
|
|
|
+ index: event.srcElement.getAttribute('dragSelectIndex'),
|
|
|
+ key: event.srcElement.getAttribute('dragSelectKey'),
|
|
|
+ current: event.srcElement.getAttribute('dragSelectCurrent'),
|
|
|
+ }
|
|
|
+ this.selectedList.push(obj)
|
|
|
+ }
|
|
|
+ this.moveSelected.style.bottom=Number(this.moveSelected.style.top.split('px')[0])+Number(this.moveSelected.style.height.split('px')[0]) + 'px';
|
|
|
+ this.moveSelected.style.right=Number(this.moveSelected.style.left.split('px')[0])+Number(this.moveSelected.style.width.split('px')[0])+'px';
|
|
|
+ this.findSelected();
|
|
|
+ this.flag=false;
|
|
|
+ this.clearDragData();
|
|
|
+ event.preventDefault(); // 阻止默认行为
|
|
|
+ event.stopPropagation(); // 阻止事件冒泡
|
|
|
+ },
|
|
|
+ mouseleaveFun(event) {
|
|
|
+ this.flag=false;
|
|
|
+ this.moveSelected.style.width=0;
|
|
|
+ this.moveSelected.style.height=0;
|
|
|
+ this.moveSelected.style.top=0;
|
|
|
+ this.moveSelected.style.left=0;
|
|
|
+ event.preventDefault(); // 阻止默认行为
|
|
|
+ event.stopPropagation(); // 阻止事件冒泡
|
|
|
+ },
|
|
|
+ findSelected(){
|
|
|
+ let list = []
|
|
|
+ if(this.selectedList && this.selectedList.length >= 2) {
|
|
|
+ let firstObj = this.selectedList[0]
|
|
|
+ let lastObj = this.selectedList[this.selectedList.length-1]
|
|
|
+ this.tableData.forEach((item,index)=>{
|
|
|
+ if(!this.isToLeft&&!this.isToTop){ // 向右下
|
|
|
+ if(index>=firstObj.index && index<=lastObj.index) {
|
|
|
+ item[firstObj.key].forEach((item1,index1)=>{
|
|
|
+ if(index1>=firstObj.current && index1<=lastObj.current) {
|
|
|
+ list.push(item1.tableId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }else if(this.isToLeft&&!this.isToTop){ // 向左下
|
|
|
+ if(index>=firstObj.index && index<=lastObj.index) {
|
|
|
+ item[firstObj.key].forEach((item1,index1)=>{
|
|
|
+ if(index1<=firstObj.current && index1>=lastObj.current) {
|
|
|
+ list.push(item1.tableId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }else if(this.isToLeft&&this.isToTop){ // 向左上
|
|
|
+ if(index<=firstObj.index && index>=lastObj.index) {
|
|
|
+ item[firstObj.key].forEach((item1,index1)=>{
|
|
|
+ if(index1<=firstObj.current && index1>=lastObj.current) {
|
|
|
+ list.push(item1.tableId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }else if(!this.isToLeft&&this.isToTop){ // 向右上
|
|
|
+ if(index<=firstObj.index && index>=lastObj.index) {
|
|
|
+ item[firstObj.key].forEach((item1,index1)=>{
|
|
|
+ if(index1>=firstObj.current && index1<=lastObj.current) {
|
|
|
+ list.push(item1.tableId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ }else if(this.selectedList && this.selectedList.length == 1){
|
|
|
+ list = this.selectedList[0].id
|
|
|
+ }
|
|
|
+ this.selectList = [...new Set(list)]
|
|
|
+ console.log("e===",this.selectList)
|
|
|
+ if(this.activeName=='select'){
|
|
|
+ this.addSelectTabelList()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ findSelectedCopy(){
|
|
|
+ return
|
|
|
+ let blockList= document.getElementsByClassName('row-item');
|
|
|
+ let selectedList = []
|
|
|
+ for(let i=0;i<blockList.length;i++){
|
|
|
+ //计算每个块的定位信息
|
|
|
+ // let left=blockList[i].offsetLeft;
|
|
|
+ // let right=blockList[i].style.width+left;
|
|
|
+ // let top=blockList[i].offsetTop;
|
|
|
+ // let bottom=blockList[i].style.height()+top;
|
|
|
+ let left=$(blockList[i]).offset().left;
|
|
|
+ let right=$(blockList[i]).width()+left;
|
|
|
+ let top=$(blockList[i]).offset().top;
|
|
|
+ let bottom=$(blockList[i]).height()+top;
|
|
|
+
|
|
|
+ //判断每个块是否被遮罩盖住(即选中)
|
|
|
+ let leftFlag=this.moveSelected.style.left.split('px')[0]<=left && left<=this.moveSelected.style.right.split('px')[0];
|
|
|
+ let rightFlag=this.moveSelected.style.left.split('px')[0]<=right && right<=this.moveSelected.style.right.split('px')[0];
|
|
|
+ let topFlag=this.moveSelected.style.top.split('px')[0]<=top && top<=this.moveSelected.style.bottom.split('px')[0];
|
|
|
+ let bottomFlag=this.moveSelected.style.top.split('px')[0]<=bottom && bottom<=this.moveSelected.style.bottom.split('px')[0];
|
|
|
+ if((leftFlag || rightFlag) && (topFlag || bottomFlag)){
|
|
|
+ console.log("位置===",left,right,top,bottom)
|
|
|
+ selectedList.push(blockList[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let list = []
|
|
|
+ for(let i=0; i < selectedList.length; i++) {
|
|
|
+ list.push(selectedList[i].getAttribute('dragSelectId'))
|
|
|
+ }
|
|
|
+ this.selectList = [...new Set(list)]
|
|
|
+ console.log("e===",this.selectList)
|
|
|
+ if(this.activeName=='select'){
|
|
|
+ this.addSelectTabelList()
|
|
|
+ }
|
|
|
+ console.log("selectedList====",selectedList);
|
|
|
+ console.log("list====",list);
|
|
|
+ },
|
|
|
+ clearDragData(){
|
|
|
+ this.moveSelected.style.width=0;
|
|
|
+ this.moveSelected.style.height=0;
|
|
|
+ this.moveSelected.style.top=0;
|
|
|
+ this.moveSelected.style.left=0;
|
|
|
+ this.moveSelected.style.bottom=0;
|
|
|
+ this.moveSelected.style.right=0;
|
|
|
},
|
|
|
-
|
|
|
/** 当前选择 开始 */
|
|
|
/** 多选 */
|
|
|
dragSelectChange(e){
|