Skip to content

Instantly share code, notes, and snippets.

@vog3lm
Last active April 18, 2018 14:47
Show Gist options
  • Select an option

  • Save vog3lm/65e93101a07fbf3e0bc5827046a61f95 to your computer and use it in GitHub Desktop.

Select an option

Save vog3lm/65e93101a07fbf3e0bc5827046a61f95 to your computer and use it in GitHub Desktop.
html/css/js drag and drop reactions; implemented register/unregister trigger event listener
function DragTagOperator(){
var position = {};
var dispatcher = null;
var args = {'root':'header'};
var events = {
'drag-register':(data) => {this.register(data)}
,'drag-unregister':(data) => {this.unregister(data)}
};
this.decorate = function(opts){
for (var key in opts){
if(args.hasOwnProperty(key)){
args[key] = opts[key];
}
}
return this;
}
this.create = function(){
dispatcher = new V13wEv3ntD1spatch3r({'events':Object.keys(events),'issues':Object.values(events)}).onRegister();
return this;
}
this.register = function(data){
if(!args.hasOwnProperty(data.tag)){
var element = $(data.tag);
element.on('mousedown',click);
position[element.attr('id')] = [element.css('left'),element.css('top'),0,0];
}
return this;
}
this.unregister = function(data){
if(args.hasOwnProperty(data.tag)){
var element = $(data.tag);
header.off('mousedown');
delete position[data.tag];
}
return this;
}
function click(evt) {
var element = $(evt.target).parent()
pos = position[element.attr('id')]
evt = evt || window.event;
pos[2] = evt.clientX;
pos[3] = evt.clientY;
var header = $(args.root)
header.on('mousemove',function(evt){move(evt,element,pos);})
header.on('mouseup',close)
}
function move(evt,element,pos){
evt = evt || window.event;
pos[0] = pos[2] - evt.clientX;
pos[1] = pos[3] - evt.clientY;
pos[2] = evt.clientX;
pos[3] = evt.clientY;
var vx = element.css('top').replace('px','')-pos[1]
var vy = element.css('left').replace('px','')-pos[0]
element.css({'top':vx+"px",'left':vy+"px"});
}
function close(evt) {
var header = $(args.root);
header.off('mousemove');
header.off('mouseup');
}
}
var operator = DragTagOperator().create();
operator.register({'tag':'item#drag-0'});
$('body').trigger('drag-register',{'call':'drag-register','id':'doc-load','tag':'item#drag-0'});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment