绘画板 03——选中元素
github地址: https://github.com/wangyuheng/painter
DEMO地址: http://painter.crick.wang/
为了针对某个元素进行操作,增加了一个选中操作的按钮。点击此按钮后,鼠标变为手指选择,滑动到元素上方时,元素特殊显示,单击后即为选中状态。
首先,增加一个全局的状态位,判断选择按钮是否被选中
SVG.isPicked = function(){
return $("#tool_pick").hasClass("active");
}
单击 pick 按钮时,鼠标变为手指
$("#tool_pick").on("click", function(){
if (SVG.isPicked()) {
$("#svgPanel").css("cursor","pointer");
}
});
因为要清空当前drawtool的事件监听,同时也要重置鼠标样式,所以抽离函数resetCurrentDrawTool,在现有handle btn点击时,进行调用
function resetCurrentDrawTool() {
currentDrawTool && currentDrawTool.stop();
$("#svgPanel").css("cursor","default");
}
针对选择元素操作,通过监听mouseover、mouseout、click事件,通过样式以及线框宽度标识。 为了方便调用,将此事件绑定,抽象为Element元素的扩展方法
SVG.extend(SVG.Element, {
pickable: function(enabled) {
var _ele = this;
elementList.push(_ele);
var color = _ele._stroke;
var width = _ele.attr("stroke-width");
_ele.on("mouseover", function() {
if (SVG.isPicked() && !_ele.attr("picked")) {
_ele.stroke({
width: width * 2,
color: 'red'
});
}
});
_ele.on("mouseout", function() {
if (SVG.isPicked() && !_ele.attr("picked")) {
_ele.stroke({
width: width,
color: color
});
}
});
_ele.on("click", function() {
if (SVG.isPicked()) {
if (!_ele.attr("picked")) {
_ele.attr("picked", true);
_ele.stroke({
width: width * 2,
color: 'yellow'
});
} else {
_ele.attr("picked", null);
_ele.stroke({
width: width,
color: color
});
}
}
});
return this;
}
});
在DrawTool的具体实现的mouseup方法中,独立判断并执行。以Rect为例,则为
function mouseup(event) {
drawing = false;
if (element.attr("width") > 0) {
element.pickable();
}
}
首页增加elementList数据,记录所有函数,方便操作。
TODO 选中元素,现在为修改边框颜色,应该修改为其他方式。
TODO 针对所有选中元素,应该存在统一数据内,方便批量操作。