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简单的秒表计时器插件

一款实用快速的jQuery插件,可以在页面上创建秒表计时器。
  其它&杂项
 3271  0

javascript支持加减数量的购物车代码

一款简单的实现购物车代码,点击商品图片下方“加入购物车”,即可将商品加入到购物车当中,随即按钮文字变为“已加入”。使用加号/减号按钮添加产品和更新数量。
  其它&杂项
 6222  0

jquery区域鼠标右键菜单插件contextmenu.js

自定义div标签区域内容,添加自定义右键菜单,多种不同样式特效!
  其它&杂项
 8301  0

CSS创建的6种不同的对角线分区特效代码

使用CSS创建对角线分区的六种不同方法。不同的方法包括:使用border边框、伪元素、SVG、线性梯度和剪辑路径等。
  其它&杂项
 2265  0

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

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