JQuery 테이블 드래그 조정 열 너비 효과(직접 작성)_jquery

WBOY
풀어 주다: 2016-05-16 16:37:57
원래의
1325명이 탐색했습니다.

데스크톱 프로그램에서 표의 머리글을 드래그하는 것과 유사하게 머리글의 경계선에 마우스를 놓으면 마우스가 좌우로 드래그하는 모양으로 바뀌게 됩니다. 그런 다음 마우스를 드래그합니다. 표에 선이 나타납니다. 마우스를 놓으면 수직선이 이동합니다. 마지막으로, 표 열 너비가 조정됩니다. 최근에 여유가 생겨서 직접 구현해 보았는데, 소소한 결과를 여기에 공유하고자 합니다.

먼저 그림과 같은 마우스 아이콘 파일이 필요합니다. 하드 드라이브에서 *.cur를 검색하면 확실히 찾을 수 있습니다.

페이지의 HTML을 변경하지 않고도 모든 페이지에서 이 효과를 사용할 수 있도록 $(document).ready(function() {});에 모든 코드를 통합하고 별도의 JS 파일을 작성했습니다.

1픽셀 너비의 DIV를 사용하여 수직선을 시뮬레이션하고 페이지 로드 후 본문 요소에 추가합니다.

$(document).ready(function() {
$("body").append("<div id=\"line\" style=\"width:1px;height:200px;border-left:1px solid #00000000; position:absolute;display:none\" ></div> ");
});
로그인 후 복사

다음 단계는 마우스가 테이블의 수직 테두리로 이동할 때 마우스 변형 문제입니다. 처음에는 mousemove 및 mouseout 이벤트를 트리거하기 위해 테이블 ​​헤더에 작은 블록 수준 요소를 추가하는 것을 고려했지만 단순화를 위해 전체 테이블에 대한 마우스 움직임을 변경하기로 선택했습니다. 이 이벤트를 헤더에 추가했습니다.

TH의 mousemove 이벤트에서 마우스 변환 처리:

$("th").bind("mousemove", function(event) {
var th = $(this);
//不给第一列和最后一列添加效果
if (th.prevAll().length <= 1 || th.nextAll().length < 1) {
return;
}
var left = th.offset().left;
//距离表头边框线左右4像素才触发效果
if (event.clientX - left < 4 || (th.width() - (event.clientX - left)) < 4) {
th.css({ 'cursor': '/web/Page/frameset/images/splith.cur' });
//修改为你的鼠标图标路径
}
else {
th.css({ 'cursor': 'default' });
}
});
로그인 후 복사

마우스를 누르면 수직선이 표시되고 높이와 위치 CSS 속성이 설정되는 동시에 현재 열 너비를 변경하려는 TH 개체가 경계선을 공유하기 때문에 기록됩니다. 두 개의 TH에 의해 이전 항목은 항상 TH 개체로 사용됩니다.

$("th").bind("mousedown", function(event) {
var th = $(this);
//与mousemove函数中同样的判断
if (th.prevAll().length < 1 | th.nextAll().length < 1) {
return;
}
var pos = th.offset();
if (event.clientX - pos.left < 4 || (th.width() - (event.clientX - pos.left)) < 4) {
var height = th.parent().parent().height();
var top = pos.top;
$("#line").css({ "height": height, "top": top,"left":event .clientX,"display":"" });
//全局变量,代表当前是否处于调整列宽状态
lineMove = true;
//总是取前一个TH对象
if (event.clientX - pos.left < th.width() / 2) {
currTh = th.prev();
}
else {
currTh = th;
}
}
});
로그인 후 복사

다음은 마우스가 움직일 때 수직선이 움직이는 효과입니다. 마우스가 TH 요소를 떠날 때 이 효과가 필요하기 때문입니다. 이 효과는 BODY 요소의 mousemove 함수에 작성됩니다.

$("body").bind("mousemove", function(event) {
if (lineMove == true) {
$("#line").css({ "left": event.clientX }).show();
}
});
로그인 후 복사

마지막은 마우스가 튕겨져 나올 때의 최종 열 너비 조정 효과입니다. 여기서는 BODY 및 TH 요소에 동일한 mouseup 코드를 추가했습니다. 원래는 BODY에 mouseup 함수만 추가하면 된다고 생각했는데 왜 마우스가 TH에 있을 때 이벤트가 발생하지 않는지 이해가 안되서 TH 요소에 코드를 추가하게 되었습니다. 내 레벨이 제한되어 있고 아래에서 완전히 반복되는 코드를 추출하는 방법을 모르겠습니다.

$("body").bind("mouseup", function(event) {
if (lineMove == true) {
$("#line").hide();
lineMove = false;
var pos = currTh.offset();
var index = currTh.prevAll().length;
currTh.width(event.clientX - pos.left);
currTh.parent().parent().find("tr").each(function() {
$(this).children().eq(index).width(event.clientX - pos.left);
});
}
});
$("th").bind("mouseup", function(event) {
if (lineMove == true) {
$("#line").hide();
lineMove = false;
var pos = currTh.offset();
var index = currTh.prevAll().length;
currTh.width(event.clientX - pos.left);
currTh.parent().parent().find("tr").each(function() {
$(this).children().eq(index).width(event.clientX - pos.left);
});
}
});
로그인 후 복사

좋아요. 위 코드가 포함된 JS 파일을 이 효과가 필요한 페이지에 삽입하기만 하면 이 효과를 페이지의 테이블에 추가할 수 있습니다.

또한 위 코드는 Firefox에서 마우스 아이콘을 맞춤설정할 때 아무런 효과가 없습니다. 사용된 jquery는 1.2.6입니다

효과 파일 다운로드

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿