我用的是第四角的交互作用。
我的拖曳功能工作得很好。
在我的可调整大小的方法中,除了currentTarget和target之外,事件不能为我提供任何对象属性。
在http://interactjs.io/#resizing的示例中
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.rect和event.deltaRect。它说Property event.rect和event.deltaRect不是InteractEvent.的类型
问题为什么会发生这种事?
整个守则是:
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);
}控制台中的错误
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'.发布于 2017-12-29 12:00:09
InteractEvent接口没有rect和deltaRect。您可以在..\node_modules\interactjs\index.d.ts中检查
这可能是由于不同版本的生产和样例代码。
但周围有个工作。
.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);
//......
}发布于 2017-12-31 12:29:29
正如Aatish前面提到的,关于../node_modules\interactjs\index.d.ts存在一个问题,ts没有适当的公开属性,所以我的一位同事建议将它添加到ts中,并解决了这个问题。
https://stackoverflow.com/questions/47986062
复制相似问题