the only reason im using the transform way is because it used in a script which allows dragging with the mouse
<script type="text/javascript"><![CDATA[
function makeDraggable(evt) {
var svg = evt.target;
svg.addEventListener('mousedown', startDrag);
svg.addEventListener('mousemove', drag);
svg.addEventListener('mouseup', endDrag);
svg.addEventListener('mouseleave', endDrag);
svg.addEventListener('touchstart', startDrag);
svg.addEventListener('touchmove', drag);
svg.addEventListener('touchend', endDrag);
svg.addEventListener('touchleave', endDrag);
svg.addEventListener('touchcancel', endDrag);
var selectedElement, offset, transform,
bbox, minX, maxX, minY, maxY, confined;
var boundaryX1 = 25;
var boundaryX2 = 1600;
var boundaryY1 = 25;
var boundaryY2 = 900;
function getMousePosition(evt) {
var CTM = svg.getScreenCTM();
if (evt.touches) { evt = evt.touches[0]; }
return {
x: (evt.clientX - CTM.e) / CTM.a,
y: (evt.clientY - CTM.f) / CTM.d
};
}
function startDrag(evt) {
if (evt.target.classList.contains('draggable')) {
selectedElement = evt.target;
offset = getMousePosition(evt);
// Make sure the first transform on the element is a translate transform
var transforms = selectedElement.transform.baseVal;
if (transforms.length === 0 || transforms.getItem(0).type !== SVGTransform.SVG_TRANSFORM_TRANSLATE) {
// Create an transform that translates by (0, 0)
var translate = svg.createSVGTransform();
translate.setTranslate(0, 0);
selectedElement.transform.baseVal.insertItemBefore(translate, 0);
}
// Get initial translation
transform = transforms.getItem(0);
offset.x -= transform.matrix.e;
offset.y -= transform.matrix.f;
confined = evt.target.classList.contains('confine');
if (confined) {
bbox = selectedElement.getBBox();
minX = boundaryX1 - bbox.x;
maxX = boundaryX2 - bbox.x - bbox.width;
minY = boundaryY1 - bbox.y;
maxY = boundaryY2 - bbox.y - bbox.height;
}
}
}
function drag(evt) {
if (selectedElement) {
evt.preventDefault();
var coord = getMousePosition(evt);
var dx = coord.x - offset.x;
var dy = coord.y - offset.y;
if (confined) {
if (dx < minX) { dx = minX; }
else if (dx > maxX) { dx = maxX; }
if (dy < minY) { dy = minY; }
else if (dy > maxY) { dy = maxY; }
}
transform.setTranslate(dx, (Math.round(dy / 10) * 10));
document.getElementById("x_coord").value = dx;
document.getElementById("y_coord").value = dy;
}
}
function endDrag(evt) {
selectedElement = false;
}
}
]]> </script>
How can I chang eit so it doesn’t use transform and instead just changes the x and y position
Heres the SVG with the dragging function.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1650 900" onload="makeDraggable(evt)">
<defs>
<script type="text/javascript"><![CDATA[
function makeDraggable(evt) {
var svg = evt.target;
svg.addEventListener('mousedown', startDrag);
svg.addEventListener('mousemove', drag);
svg.addEventListener('mouseup', endDrag);
svg.addEventListener('mouseleave', endDrag);
svg.addEventListener('touchstart', startDrag);
svg.addEventListener('touchmove', drag);
svg.addEventListener('touchend', endDrag);
svg.addEventListener('touchleave', endDrag);
svg.addEventListener('touchcancel', endDrag);
var selectedElement, offset, transform,
bbox, minX, maxX, minY, maxY, confined;
var boundaryX1 = 25;
var boundaryX2 = 1600;
var boundaryY1 = 25;
var boundaryY2 = 900;
function getMousePosition(evt) {
var CTM = svg.getScreenCTM();
if (evt.touches) { evt = evt.touches[0]; }
return {
x: (evt.clientX - CTM.e) / CTM.a,
y: (evt.clientY - CTM.f) / CTM.d
};
}
function startDrag(evt) {
if (evt.target.classList.contains('draggable')) {
selectedElement = evt.target;
offset = getMousePosition(evt);
// Make sure the first transform on the element is a translate transform
var transforms = selectedElement.transform.baseVal;
if (transforms.length === 0 || transforms.getItem(0).type !== SVGTransform.SVG_TRANSFORM_TRANSLATE) {
// Create an transform that translates by (0, 0)
var translate = svg.createSVGTransform();
translate.setTranslate(0, 0);
selectedElement.transform.baseVal.insertItemBefore(translate, 0);
}
// Get initial translation
transform = transforms.getItem(0);
offset.x -= transform.matrix.e;
offset.y -= transform.matrix.f;
confined = evt.target.classList.contains('confine');
if (confined) {
bbox = selectedElement.getBBox();
minX = boundaryX1 - bbox.x;
maxX = boundaryX2 - bbox.x - bbox.width;
minY = boundaryY1 - bbox.y;
maxY = boundaryY2 - bbox.y - bbox.height;
}
}
}
function drag(evt) {
if (selectedElement) {
evt.preventDefault();
var coord = getMousePosition(evt);
var dx = coord.x - offset.x;
var dy = coord.y - offset.y;
if (confined) {
if (dx < minX) { dx = minX; }
else if (dx > maxX) { dx = maxX; }
if (dy < minY) { dy = minY; }
else if (dy > maxY) { dy = maxY; }
}
transform.setTranslate(dx, (Math.round(dy / 10) * 10));
document.getElementById("x_coord").value = dx;
document.getElementById("y_coord").value = dy;
}
}
function endDrag(evt) {
selectedElement = false;
}
}
]]> </script>
<pattern id="pattern"
width="8" height="10"
patternUnits="userSpaceOnUse"
patternTransform="rotate(45 50 50)">
<line stroke="#ffcccb" stroke-width="7px" y2="10"/>
</pattern>
<pattern id="pattern2"
width="8" height="10"
patternUnits="userSpaceOnUse"
patternTransform="rotate(45 50 50)">
<line stroke="#ddd" stroke-width="7px" y2="10"/>
</pattern>
<style>
svg .row_text, svg .pod_text {
fill:#999;
font-size:1.7em;
}
svg .row{
fill:url(#pattern2);
stroke:#999;
stroke-width:2;
}
svg {
background-image: url("../images/Data_Center.jpg");
width: 100%;
background-size: 100%;
background-repeat: no-repeat;
}
svg text.guide {
fill:#f00;
}
svg line.guide {
stroke:#f00;
stroke-width:.2;
stroke-dasharray:5;
}
rect.draggable {
fill:url(#pattern);
stroke:#DC143C;
stroke-width:2;
cursor: move;
}
</style>
</defs>
<rect x="25" y="25" width="94" height="28" class="draggable" id="new_row" transform="translte(0,0)"/>
<rect x="151" y="97" width="28" height="220" class="row" />
<rect x="151" y="97" width="28" height="220" class="row" />
<text x="162" y="89" class="row_text" text-anchor="middle">One</text><rect x="331" y="85" width="40" height="28" class="row" />
<rect x="331" y="85" width="40" height="28" class="row" />
<text x="342" y="77" class="row_text" text-anchor="middle">two</text><rect x="43" y="144" width="28" height="76" class="row" />
<rect x="43" y="144" width="28" height="76" class="row" />
<text x="54" y="136" class="row_text" text-anchor="middle">t</text></svg>