간단한 줄 드래그 효과
7553 단어 간단히
사람이 선입견을 가진 이유는 그가 이렇게 몇 개의 자물쇠를 쥐고 있기 때문이다.만약 그의 손에 자물쇠가 매우 많을 때, 그는 문을 열 때 약간 멈추고 진지하게 골랐다.따라서 더 많은 기본 API를 숙지할수록 더 좋은 옵션을 얻을 수 있습니다.다른 사고방식으로 드래그할 때 (mousedown) 현재 줄과 스타일과 좌표를 저장하고 드래그할 때 마우스가 있는 위치의 요소를 얻는다. 이 요소는 교묘한 API를 사용하여document을 얻는다.elementFromPoint(x,y).통상적으로, 우리가 얻은 것은 TD이다. 물론, 만약 당신이 안에 DIV를 넣는다면, 그것은 DIV로다.그리고 우리는 TR 요소를 얻은 다음에 mousedown에 저장된 TR 요소가 같은 요소인지, 같은 요소가 아닌지를 비교한 다음에 우리는 진일보한 조작을 했다.이때 우리는 그것이 위로 이동하고 아래로 이동하는 간단한 감법이라고 판결해야 한다.이어서 두 줄을 바꾸고 insertBefore를 사용합니다.마지막으로 mouseup을 할 때 줄을 복원하는 스타일은 바로!복잡한 좌표 계산이 없기 때문에, 전체 프로그램은 매우 효율적이다!
//http://www.cnblogs.com/rubylouvre/archive/2011/04/16/2018148.html by
window.onload = function(){
//
var addEvent = document.addEventListener ? function(el,type,callback){
el.addEventListener( type, callback, !1 );
} : function(el,type,callback){
el.attachEvent( "on" + type, callback );
}
//
var getStyle = document.defaultView ? function(el,style){
return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)
} : function(el,style){
style = style.replace(/\-(\w)/g, function($, $1){
return $1.toUpperCase();
});
return el.currentStyle[style];
}
var dragManager = {
y:0,
draging:function(e){//mousemove
var handler = dragManager.handler;
if(handler){
e = e || event;
if(window.getSelection){//w3c
window.getSelection().removeAllRanges();
}else if(document.selection){
document.selection.empty();//IE
}
var y = e.clientY;
var down = y > dragManager.y;//
var tr = document.elementFromPoint(e.clientX,e.clientY);
if(tr && tr.nodeName == "TD"){
tr = tr.parentNode
dragManager.y = y;
if( handler !== tr){
tr.parentNode.insertBefore(handler, (down ? tr.nextSibling : tr));
}
};
}
},
dragStart:function(e){
e = e || event;
var handler = e.target || e.srcElement;
if(handler.nodeName === "TD"){
handler = handler.parentNode;
dragManager.handler = handler;
if(!handler.getAttribute("data-background")){
handler.setAttribute("data-background",getStyle(handler,"background-color"))
}
//
handler.style.backgroundColor = "#ccc";
handler.style.cursor = "move";
dragManager.y = e.clientY;
}
},
dragEnd:function(){
var handler = dragManager.handler
if (handler) {
handler.style.backgroundColor = handler.getAttribute("data-background");
handler.style.cursor = "default";
dragManager.handler = null;
}
},
main:function(el){
addEvent(el,"mousedown",dragManager.dragStart);
addEvent(document,"mousemove",dragManager.draging);
addEvent(document,"mouseup",dragManager.dragEnd);
}
}
var el = document.getElementById("table");
dragManager.main(el);
}
window.onload = function(){
//바인딩 이벤트
var addEvent = document.addEventListener ? function(el,type,callback){
el.addEventListener( type, callback, !1 );
} : function(el,type,callback){
el.attachEvent( "on"+ type, callback );
}
//정확한 스타일 가져오기
var getStyle = document.defaultView ? function(el,style){
return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)
} : function(el,style){
style = style.replace(/\-(\w)/g, function($, $1){
return $1.toUpperCase();
});
return el.currentStyle[style];
}
var dragManager = {
y:0,
draging:function(e) {//mousemove 시 줄 드래그
var handler = dragManager.handler;
if(handler){
e = e || event;
if(window.getSelection){//w3c
window.getSelection().removeAllRanges();
}else if(document.selection){
document.selection.empty();//IE
}
var y = e.clientY;
var down = y > dragManager.y;//아래로 이동 여부
var tr = document.elementFromPoint(e.clientX,e.clientY);
if(tr && tr.nodeName == "TD"){
tr = tr.parentNode
dragManager.y = y;
if( handler !== tr){
tr.parentNode.insertBefore(handler, (down ? tr.nextSibling : tr));
}
};
}
},
dragStart:function(e){
e = e || event;
var handler = e.target || e.srcElement;
if(handler.nodeName === "TD"){
handler = handler.parentNode;
dragManager.handler = handler;
if(!handler.getAttribute("data-background")){
handler.setAttribute("data-background",getStyle(handler,"background-color"))
}
//이동식 상태로 표시
handler.style.backgroundColor = "#ccc";
handler.style.cursor = "move";
dragManager.y = e.clientY;
}
},
dragEnd:function(){
var handler = dragManager.handler
if (handler) {
handler.style.backgroundColor = handler.getAttribute("data-background");
handler.style.cursor = "default";
dragManager.handler = null;
}
},
main:function(el){
addEvent(el,"mousedown",dragManager.dragStart);
addEvent(document,"mousemove",dragManager.draging);
addEvent(document,"mouseup",dragManager.dragEnd);
}
}
var el = document.getElementById("table");
dragManager.main(el);
}
행 드래그by사도정미
1 | One | dom.require |
2 | Two | ControlJS |
3 | Three | HeadJS |
4 | Four | LAB.js |
5 | Five | $script.js |
6 | Six | NBL.js |
실행 코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
flutter_nearby_connections를 통해 블루투스 통신을 진행하다얼마 전에 컴퓨터 기사들이 맞서 싸우는 컴퓨터 앱을 내놓았다.PvP 기능으로 블루투스 통신.그때 사용한 라이브러리는 의 라이브러리입니다. 그럼 제가 설명해 드릴게요flutter_nearby_connections. D...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.