javascript实现的支持移动端触摸鼠标拖拽的DIV元素

所属分类: 网页特效-其它&杂项    2023-11-25 11:24:20

javascript实现的支持移动端触摸鼠标拖拽的DIV元素 ie兼容6
 查看演示  登录后下载 温馨提示
登录会员即可享受免费下载
 我要建站

javascript实现的支持移动端触摸鼠标拖拽的DIV元素(共3个文件)

    • index.html

使用方法

let mover;
let offsets;
let position;

function addEvent(type, callback, target = document) {target.addEventListener(type, callback, false);}
function removeEvent(type, callback, target = document) {target.removeEventListener(type, callback);}

function offsetPosition(target) {
  let node = target;
  let X = 0;
  let Y = 0;

  do {
    X += node.offsetLeft;
    Y += node.offsetTop;
    node = node.offsetParent;
  } while (
  node);

  return { X, Y };
}
function parentsUntilMatch(target, filter) {
  if (!target || target.nodeType === 9) return null;
  switch (true) {
    case 'matchesSelector' in target:
      if (target.matchesSelector(filter)) return target;
      break;
    case 'mozMatchesSelector' in target:
      if (target.mozMatchesSelector(filter)) return target;
      break;
    case 'msMatchesSelector' in target:
      if (target.msMatchesSelector(filter)) return target;
      break;
    case 'oMatchesSelector' in target:
      if (target.oMatchesSelector(filter)) return target;
      break;
    case 'webkitMatchesSelector' in target:
      if (target.webkitMatchesSelector(filter)) return target;
      break;
    default:
      if (target.matches(filter)) return target;
      break;}

  return parentsUntilMatch(target.parentNode, filter);
}
function styleStringFromObj(obj) {
  let str = '';

  for (const prop in obj) {
    str += `${prop}:${obj[prop]};`;
  }

  return str;
}

function mousedown(isTouch = false) {
  const MOVE = isTouch ? 'touchmove' : 'mousemove';
  const END = isTouch ? 'touchend' : 'mouseup';

  return function caller(evt) {
    const target = parentsUntilMatch(evt.target, '.js-is-draggable');

    if (!target) return;

    mover = target;
    offsets = { X: evt.pageX, Y: evt.pageY };
    position = offsetPosition(mover);
    mover.setAttribute('style', styleStringFromObj({
      position: 'relative',
      top: `${position.Y}px`,
      left: `${position.X}px` }));


    mover.classList.add('js-is-dragging');
    mover.setAttribute('aria-grabbed', true);

    addEvent(MOVE, mousemove);
    addEvent(END, mouseup(isTouch));
  };
}
function mousemove(evt) {
  // evt.preventDefault();
  // new offsets based on mouse position
  const newOffsets = {
    X: evt.pageX,
    Y: evt.pageY };


  const newY = position.Y + (newOffsets.Y - offsets.Y);
  const newX = position.X + (newOffsets.X - offsets.X);

  // update styles
  mover.style.top = newY + 'px';
  mover.style.left = newX + 'px';

  // update object
  offsets = newOffsets;

  // update position
  position = { X: newX, Y: newY };
}
function mouseup(isTouch = false) {
  const MOVE = isTouch ? 'touchmove' : 'mousemove';
  const END = isTouch ? 'touchend' : 'mouseup';

  return function caller(evt) {
    removeEvent(MOVE, mousemove);
    removeEvent(END, caller);

    mover.classList.remove('js-is-dragging');
    mover.setAttribute('aria-grabbed', false);

    mover = offsets = position = undefined;
  };
}

addEvent('mousedown', mousedown());
addEvent('touchstart', mousedown(true));

站长提示:
1. 苦力吧素材官方QQ群:950875342
2. 平台上所有素材资源,需注册登录会员方能正常下载。
3. 会员用户积极反馈网站、素材资源BUG或错误问题,每次奖励2K币
4. PHP源码类素材,如需协助安装调试,或你有二次开发需求,可联系苦力吧客服。
5. 付费素材资源,需充值后方能下载,如有任何疑问可直接联系苦力吧客服
相关资源 / 其它&杂项

jquery支持左右滑动的数字弧度选择器插件

一款动态的数字选择器,可通过像旋转滑块一样向左和向右滑动来选择一个范围内的数值,还可以点击数字输入数字,自动旋转到对应位置。
  其它&杂项
 4211  0

jquery支持POST或GET方法重定向获取外部服务器数据插件

一个jQuery插件,在当前页面可通过Post或Get方法将带有嵌套对象和数组重定向到另一个URL。
  其它&杂项
 5247  0

原生js轻量级URL解析器插件

一款轻量级、快速且支持JavaScript的URL解析器,可从URL或字符串中提取任何有效数据。
  其它&杂项
 1378  0

jquery实时监听目标属性标签值更改插件

当值发生变化时触发内置函数并回调,使用DOM的MutationObserver API,并回退到setInterval,以轮询不兼容浏览器的更改。 允许在单个DOM元素上使用多个监视处理程序,并支持子元素。
  其它&杂项
 1276  0

评论数(0) 回复有机会获得K币 用户协议

^_^ 还没有人评论,快来抢个沙发!
😀
  • 😀
  • 😊
  • 😂
  • 😍
  • 😑
  • 😷
  • 😵
  • 😛
  • 😣
  • 😱
  • 😋
  • 😎
  • 😵
  • 😕
  • 😶
  • 😚
  • 😜
  • 😭
发表评论