Вам нужно сделать условие, до которого клик - после которого - драг. Два варианта:
1. Таймаут - плохо, но легко
2. Порог движения - сложно, но риск ошибиться меньше.
Код для второго варианта:
function dragnclick(el, x, y, dragfnc, clickfnc) {
var dragged = false;
var startx, starty;
el.addEventListener('mousedown', function(e) {
startx = e.clientX;
starty = e.clientY;
function dragging(e) {
if(!dragged && Math.abs(startx - e.clientX) && Math.abs(starty - e.clientY)) dragged = true;
if(dragged) dragfnc.call(el, e);
}
function enddrag(e) {
if(dragged) dragged = false;
else сlickfnc.call(el, e);
window.removeEventListener('mousemove', dragging);
window.removeEventListener('mouseup', enddrag);
}
window.addEventListener('mousemove', dragging);
window.addEventListener('mouseup', enddrag);
});
Не тестировал, но суть, думаю, понятна