Comments (6)
Okay. One final item to add, so that when zoomed, and element was scaled dragging worked 100% correctly I changed altDrag to:
Snap.plugin( function( Snap, Element, Paper, global ) {
Element.prototype.altDrag = function() {
this.drag( dragMove, dragStart, dragEnd );
return this;
}
var dragStart = function ( x,y,ev ) {
this.data('origTransform', this.transform().local );
}
var dragMove = function(dx, dy, ev, x, y) {
var zoomPan = this.paper.zpd('save');
this.attr({
transform: this.data('origTransform') + (this.data('origTransform') ? "T" : "t") + [dx / zoomPan.a, dy / zoomPan.a]
});
}
var dragEnd = function() {
}
});
from snap.svg.zpd.
Hi @greglbd,
unfortunately the library is not yet set-up to handle subsets separately. Maybe this is something that we could implement in the future.
Maybe you could explore the option to stack two svg elements (with absolute positioning inside a container) and use zpd-plugin on the upper element only. Another option would be to set the background as background-image on the svg-element.
<div class="container" style="width:400px; height:400px; position:relative">
<svg id="background" style="position:absolute; top:0px; bottom:0px; left:0px; right:0px"></svg>
<svg id="stage" style="position:absolute; top:0px; bottom:0px; left:0px; right:0px"></svg>
</div>
from snap.svg.zpd.
Seems your background image should be another svg elements. (same as @tikiatua said)
snap.svg.zpd currently doesn't support disable drag on specific element now.
Thanks for your question.
from snap.svg.zpd.
Thanks for the response @tikiatua @huei90 I'm working on extending the plugin.
I've got this feature pretty much working so i'll make a pull request when i'm done and you can decide what to do with it.
Thanks
Greg
from snap.svg.zpd.
yeah @greglbd Thanks!
Look forward to your PR!
🍻
from snap.svg.zpd.
I have found another way to achieve this functionality without modifying zpd in anyway using a slightly modified version of snaps own drag functionality. Additionally this works with groups etc out of the box which is important for dragging complex icons etc. which could be made up of many shapes and paths.
First prevent clicking on elements from triggering zpd drag events:
eve.on("snap.drag.start", function(x, y, e) {
e.stopPropagation();
});
Then add this custom drag plugin which deals with dragging when zoomed etc (props to @ibrierley):
https://github.com/ibrierley/SnapTut/blob/master/dragplugin.js
For each element or group you want to be draggable:
e.altDrag();
Overall I feel this is a better solution than modifying zpd to be all things to all people. It should be a modular plugin for zooming and panning which it's awesome at and other plugins added for additional functionality such as dragging elements etc.
from snap.svg.zpd.
Related Issues (20)
- Zoom and Pan at the same time? HOT 1
- Chrome 48 removes SVGGraphicsElement.getTransformToElement() HOT 6
- 'SVGElement.offsetParent' is deprecated HOT 5
- Zoom to element help HOT 1
- Zoom behaviors in demo 1 and 2 aren't working HOT 2
- zoom on SVG document with offset position HOT 1
- [LIMITED the POWER] This usually use on present view only. NOT for the purpose of Storing or Modifying the paper.
- _getEventPoint() using clientX/clientY HOT 5
- bower install snap.svg.zpd --save installs old version HOT 5
- load: not working HOT 6
- new feature: limit pan directions HOT 4
- wheel events no longer working in chrome/opera/firefox in the presence of both a touch pad and a mouse HOT 5
- onClick not working in Ionic IOS HOT 4
- Implemented a new feature: pan/drag in boundaries
- zpd prevent others elements to fire onblur events HOT 1
- plugin on npm is not up to date
- how to use this plugin with typescript and snapsvg-cjs HOT 2
- zoomThreshold not working
- e2e test spec
- paper.zpd('origin') only resets zoom level, not position
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from snap.svg.zpd.