首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度4 (ts文件)中的Interactjs可调整大小特征

角度4 (ts文件)中的Interactjs可调整大小特征
EN

Stack Overflow用户
提问于 2017-12-27 03:40:50
回答 2查看 1.1K关注 0票数 1

我用的是第四角的交互作用。

我的拖曳功能工作得很好。

在我的可调整大小的方法中,除了currentTargettarget之外,事件不能为我提供任何对象属性。

http://interactjs.io/#resizing的示例中

代码语言:javascript
复制
var target = event.target,

x = (parseFloat(target.getAttribute('data-x')) || 0),
y = (parseFloat(target.getAttribute('data-y')) || 0);

// update the element's style
target.style.width  = event.rect.width + 'px';
target.style.height = event.rect.height + 'px';

// translate when resizing from top or left edges
x += event.deltaRect.left;
y += event.deltaRect.top;

无法联系到event.rectevent.deltaRect。它说Property event.rectevent.deltaRect不是InteractEvent.的类型

问题为什么会发生这种事?

整个守则是:

代码语言:javascript
复制
let msgFrontX,
  msgFrontY,
  imgFrontX,
  imgFrontY,
  msgBackX,
  msgBackY,
  imgBackX,
  imgBackY;
interact('.resize-drag')
  .draggable({
    // enable inertial throwing
    inertia: true,
    // keep the element within the area of it's parent
    restrict: {
      restriction: "parent",
      endOnly: true,
      elementRect: {
        top: 0,
        left: 0,
        bottom: 1,
        right: 1
      }
    },
    // enable autoScroll
    autoScroll: true,
    onstart: function (event) {},
    // call this function on every dragmove event
    onmove: dragMoveListener,
    // call this function on every dragend event
    onend: function (event) {
      const parentContainer = event.currentTarget.offsetParent;
      const elem = event.currentTarget;

      function percentageCalc(direction) {
        if (direction === 'horizontal') {
          return event.clientX0 / event.clientX 100;
        } else {
          return event.clientY0 / event.clientY 100;
        }
      }
      if (parentContainer.classList.contains('front')) {
        if (elem.classList.contains('msg-container')) {
          msgFrontX = percentageCalc('horizontal');
          msgFrontY = percentageCalc('vertical');
        } else {
          imgFrontX = percentageCalc('horizontal');
          imgFrontY = percentageCalc('vertical');
        }
      } else {
        if (elem.classList.contains('msg-container')) {
          msgBackX = percentageCalc('horizontal');
          msgBackY = percentageCalc('vertical');
        } else {
          imgBackX = percentageCalc('horizontal');
          imgBackY = percentageCalc('vertical');
        }
      }
      that.setPositions(msgFrontX, msgFrontY, imgFrontX, imgFrontY,
        msgBackX, msgBackY, imgBackX, imgBackY);
    }
  }).resizable({
    edges: {
      left: true,
      right: true,
      bottom: true,
      top: true
    },
    restrict: {
      restriction: "parent",
      endOnly: true,
      elementRect: {
        top: 0,
        left: 0,
        bottom: 1,
        right: 1
      }
    }
  }).on('resizeend', function (event) {
    console.log(event.resizeRects);
    var target = event.target,
      x = (parseFloat(target.getAttribute('data-x')) || 0),
      y = (parseFloat(target.getAttribute('data-y')) || 0);

    // update the element's style
    target.style.width = event.rect.width + 'px';
    target.style.height = event.rect.height + 'px';

    // translate when resizing from top or left edges
    x += event.deltaRect.left;
    y += event.deltaRect.top;

    target.style.webkitTransform = target.style.transform =
      'translate(' + x + 'px,' + y + 'px)';

    target.setAttribute('data-x', x);
    target.setAttribute('data-y', y);

  });

function dragMoveListener(event) {
  const target = event.target,
    // keep the dragged position in the data-x/data-y attributes
    x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx,
    y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
  // translate the element
  target.style.webkitTransform =
    target.style.transform =
    'translate(' + x + 'px, ' + y + 'px)';
  // update the position attributes
  target.setAttribute('data-x', x);
  target.setAttribute('data-y', y);
}

控制台中的错误

代码语言:javascript
复制
ERROR in C:/Users/usuario/Documents/sitios/tshirtCustom/src/app/customizer/customizer.component.ts (325,34): Property 'rect' does not exist on type 'InteractEvent'.
ERROR in C:/Users/usuario/Documents/sitios/tshirtCustom/src/app/customizer/customizer.component.ts (326,35): Property 'rect' does not exist on type 'InteractEvent'.
ERROR in C:/Users/usuario/Documents/sitios/tshirtCustom/src/app/customizer/customizer.component.ts (329,18): Property 'deltaRect' does not exist on type 'InteractEvent'.
ERROR in C:/Users/usuario/Documents/sitios/tshirtCustom/src/app/customizer/customizer.component.ts (330,18): Property 'deltaRect' does not exist on type 'InteractEvent'.
EN

回答 2

Stack Overflow用户

发布于 2017-12-29 12:00:09

InteractEvent接口没有rect和deltaRect。您可以在..\node_modules\interactjs\index.d.ts中检查

这可能是由于不同版本的生产和样例代码。

但周围有个工作。

代码语言:javascript
复制
.on('resizeend', function (ev) {
   const event = <any> ev;
   console.log(event.resizeRects);
   var target = event.target,
   x = (parseFloat(target.getAttribute('data-x')) || 0),
   y = (parseFloat(target.getAttribute('data-y')) || 0);

   //......
}
票数 1
EN

Stack Overflow用户

发布于 2017-12-31 12:29:29

正如Aatish前面提到的,关于../node_modules\interactjs\index.d.ts存在一个问题,ts没有适当的公开属性,所以我的一位同事建议将它添加到ts中,并解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47986062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档