绘画板 05——设置图形边框颜色与背景色(喷枪)

本贴最后更新于 3133 天前,其中的信息可能已经天翻地覆

github 地址: https://github.com/wangyuheng/painter

DEMO 地址: http://painter.crick.wang/

边框与背景色

首先,使用了开源的 spectrum.js 作为颜色选择器,
之前以 SVG 对象保存全局方法与对象,现在通过新定义一个 GlobalStatus,存在全局属性,并通过按钮状态判断状态

var GlobalStatus = { defaultFontColor:"#0073c6", defaultFillColor:"#ececec", defaultLineSize:"2", isPicked:function(){ return $("#tool_pick").hasClass("active"); }, isPreFilled:function(){ return $("#tool_fill").hasClass("active"); }, getFontColor:function(){ return $("#font_color").attr("data-color"); }, getFillColor:function(){ return $("#fill_color").attr("data-color"); }, getLineSize:function(){ return this.defaultLineSize; }, getFillOpacity:function(){ var fillOpacity = "0.0"; if (this.getFillColor() != this.defaultFillColor) { fillOpacity = "1.0"; } return fillOpacity; } }

在首页给默认线条颜色及背景颜色赋值,并设置状态 data-color 保存颜色值

$("#font_color span").css("background", GlobalStatus.defaultFontColor); $("#font_color").attr("data-color", GlobalStatus.defaultFontColor); $("#fill_color span").css("background", GlobalStatus.defaultFillColor); $("#fill_color").attr("data-color", GlobalStatus.defaultFillColor);

颜色选择器发生变化时,同时变更颜色与 data-color 属性值

$("#colorPalettes").spectrum({ flat: true, showPaletteOnly: true, color: '#0073c6', move: function(tinycolor) { console.log("color move"); console.log(tinycolor.toHexString()) if ($("#fill_color").hasClass("active")) { $("#fill_color").attr("data-color", tinycolor.toHexString()); $("#fill_color span").eq(0).css("background", tinycolor.toHexString()); } else if ($("#font_color").hasClass("active")) { $("#font_color").attr("data-color", tinycolor.toHexString()); $("#font_color span").eq(0).css("background", tinycolor.toHexString()); } }, palette: spectrumColors });

这里有一个取巧的地方,为了让背景颜色透明显示,规定 ececec 为透明颜色。选择此颜色时,将透明度 opacity 设置为全透明。

这样做有一个问题,如果用户自定义此颜色,可以将自定义的颜色修改为 ececed,不会在视觉上有较大影响。

在绘制元素时,通过 GlobalStatus 设置元素的边框、颜色、及透明度。已 rect 为例

function mousedown(event) { console.log('rect mousedown'); drawing = true; startPoint = svgDoc.transformPoint(event); element = parent.rect(0, 0).fill(GlobalStatus.getFillColor()).style("fill-opacity", GlobalStatus.getFillOpacity()).stroke({ width: GlobalStatus.getLineSize(), color: GlobalStatus.getFontColor() }); }

此时,绘制的颜色就会根据设置的颜色及背景色发生变化。

喷枪

在 GlobalStatus 中增加了 isPreFilled()方法,判断喷枪是否被选中。在 Element 的扩展方法中,监听 click 事件。
如果为选中喷枪的点击,则修改元素的对应属性值即可。

_ele.on("click", function() { if (GlobalStatus.isPreFilled()) { if ($("#fill_color").hasClass("active")) { _ele.fill(GlobalStatus.getFillColor()); _ele.style("fill-opacity", GlobalStatus.getFillOpacity()); } else { _ele.style("stroke", GlobalStatus.getFontColor()); } } else if (GlobalStatus.isPicked()) { if (!_ele.attr("picked")) { _ele.attr("picked", true); console.log(_ele.handleBorder); _ele.handleBorder = _ele.handleBorder || new HandleBorder(svgDoc); _ele.handleBorder.showShade(_ele); pickedElementList.push(_ele); } else { _ele.attr("picked", null); _ele.handleBorder && _ele.handleBorder.hideShade(_ele); pickedElementList.remove(_ele); } } });

这里有一个用户体验的问题,喷枪是同时修改边框色和背景色,还是分别修改?

现在的实现方法为分别修改。用户需要点击线条与背景色,然后再用喷枪工具分别修改元素颜色。

  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    411 引用 • 3588 回帖
  • SVG
    24 引用 • 73 回帖
  • 喷枪
    1 引用
  • Painter
    14 引用 • 31 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    88 引用 • 139 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 3 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 9 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 575 关注
  • 叶归
    5 引用 • 16 回帖 • 10 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 462 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 401 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 160 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 492 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 437 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 266 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 4 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 32 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 786 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 30 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 2 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 1 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 82 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    168 引用 • 597 回帖 • 1 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1280 回帖 • 3 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 70 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 7 关注