how to fix the position of mask in snapsvg.js?

青春壹個敷衍的年華 提交于 2019-12-11 11:57:40

问题


Here is js code:

var cv = Snap('#cv').attr({height: '100%', width: '100%'});

var mskHide = cv.rect().attr({height: '100%', width: '100%', left:0, top:0, fill: '#666'});
var mskShow = cv.circle(200, 200, 150).attr({fill: '#fff'});
var mskG = cv.group(mskHide, mskShow);

var bg = cv.circle(200, 200, 150).attr({fill: '#aaa'});
var customImg = cv.image('http://placehold.it/500/990000').attr({mask: mskG});

//when I drag the customImg, I want mskG fixed position
customImg.drag();

You can preview here: http://codepen.io/rlog/pen/eKBlc

The question is: When I drag the customImg, how can I fix the position of mskG.

The mskG is no need move whit costomImg

this example is what I want: http://codepen.io/rlog/pen/bAImu

Thanks!


回答1:


You could basically do what you have in the 2nd codepen.

var cv = Snap('#cv').attr({height: '100%', width: '100%'});

var mskHide = cv.rect().attr({height: '100%', width: '100%', left:0, top:0, fill: '#666'});
var mskShow = cv.circle(200, 200, 150).attr({fill: '#fff'});
var mskG = cv.group(mskHide, mskShow);


var bg = cv.circle(200, 200, 150).attr({fill: '#aaa'});

var customImg = cv.image('http://placehold.it/500/990000').attr({mask: mskG });


customImg.drag( myDrag );
function myDrag(dx,dy,x,y) {
  customImg.attr({ x: dx, y: dy })
}

codepen

If you want a different drag from the example shown to include stored start drag location, you would amend it something like the following...

customImg.attr({ x: 0, y: 0})

var move = function(dx,dy) {
this.attr({
      x: +this.data('ox') + +dx,
      y: +this.data('oy') + +dy
    })
} 

var start = function(x,y) {
  this.data('ox', this.attr('x'));
  this.data('oy', this.attr('y'));
}

var end = function(x,y) {}  

customImg.drag( move, start, end )

codepen



来源:https://stackoverflow.com/questions/24256991/how-to-fix-the-position-of-mask-in-snapsvg-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!