给SVG加上事件

2018年年底,当大家都沉浸在过年的喜气中时,我让一个小活儿给愁到了。
需求是这样的:
某区一共有若干街道,每个街道有若干社区,每个社区有N个楼宇。以社区为单位,

  1. 点击每个楼时,显示当前楼的逃生路线。备注,需要动画。
  2. 静态展示全部楼宇的逃生路线。

由于每个社区的楼宇分布情况非常复杂,还要适应屏幕的宽度,当时首先想到的就是svg。在这个小项目之前,我对svg技术理解只停留在“矢量”这个层面上。查资料充电继续学习,发现svg的每一个图形元素都可以当成一个html节点来处理,就是说,<g> <path> <line> <ellipse> <circle>等等这些都可以单独加事件。下面一个例子说明。
打开AI,当然我的头脑直接代码写复杂的图形肯定是不可能的,借助AI就容易的多了(不要忘了我是个UI)。

image.png

用AI先绘制了一个这样的矢量图,并且给背景起了个名字“bg”,整个组命名为“m”。id=‘bg’的背景,不透明度设置为50%。

图层的名字将成为每个图形元素的id。

image.png

接下来,给图片添加事件:

  1. 鼠标放上去,id=‘bg’的背景,“不透明度”变为100%
  2. 鼠标移开,id=‘bg’的背景,“不透明度”变回50%
  3. 点击图片,弹出信息“提醒:该吃药了!”

打开AI的 “窗口” > “SVG交互”,选择哪个图形,就给哪个图形添加事件,图中只是一个例子,我把事件都加在了id=‘m’的组上:

image.png

在“存储为” SVG格式时,就可以查看SVG源码了。


image.png

最后献上代码段:

<svg version="1.1" id="test_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="595.28px" height="841.89px" viewBox="0 0 595.28 841.89" enable-background="new 0 0 595.28 841.89" xml:space="preserve">
<g id="m"
   onclick="alert('提醒:该吃药了!')"
   onmouseover="document.getElementById('bg').style.opacity='1'"
   onmouseout="document.getElementById('bg').style.opacity='0.5'">
    <g id="bg" opacity="0.5">
        <circle id="_x32_" opacity="0.3" fill="#B59BC8" cx="243.081" cy="149.346" r="73"/>
        <circle id="_x31_" opacity="0.3" fill="#B59BC8" cx="332.081" cy="149.346" r="73"/>
    </g>
    <g>
        <g>
            <g>
                <path fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" d="M253.815,127.921
                    c-7.194-7.194-18.857-7.193-26.051,0c-7.194,7.194-7.194,18.857,0,26.051l21.424,21.424l26.051-26.051L253.815,127.921z"/>
                <path fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" d="M275.24,149.346"/>
                <path fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" d="M249.189,175.397"/>

                <line fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" x1="275.24" y1="149.346" x2="249.189" y2="175.397"/>
            </g>

            <ellipse transform="matrix(0.7071 -0.7071 0.7071 0.7071 -38.0124 232.9738)" fill="#E4DAEB" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" cx="262.214" cy="162.371" rx="18.421" ry="8"/>
            <path fill="#E7E4F2" d="M263.428,144.776c0.683,0.684,0.683,1.792,0,2.475l0,0c-0.684,0.683-1.792,0.683-2.475,0l-8.132-8.132
                c-0.683-0.683-0.683-1.792,0-2.475l0,0c0.684-0.683,1.792-0.683,2.475,0L263.428,144.776z"/>
            <path fill="#E7E4F2" d="M250.877,132.048c0.732,0.732,0.732,1.919,0,2.652l0,0c-0.732,0.732-1.919,0.732-2.652,0l0,0
                c-0.732-0.732-0.732-1.919,0-2.652l0,0C248.958,131.316,250.145,131.316,250.877,132.048L250.877,132.048z"/>
        </g>
        <g>
            <g>
                <path fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" d="M336.326,153.973
                    c7.193-7.194,7.193-18.857,0-26.051c-7.193-7.194-18.857-7.194-26.051,0l-21.425,21.424l26.052,26.051L336.326,153.973z"/>
                <path fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" d="M314.902,175.397"/>
                <path fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" d="M288.851,149.346"/>

                <line fill="#FFFFFF" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" x1="314.902" y1="175.397" x2="288.851" y2="149.346"/>
            </g>

            <ellipse transform="matrix(0.7071 0.7071 -0.7071 0.7071 203.2255 -165.8995)" fill="#E4DAEB" stroke="#4E469A" stroke-width="2" stroke-miterlimit="10" cx="301.876" cy="162.372" rx="18.421" ry="8"/>
        </g>
        <g>
            <circle fill="#402A8C" cx="266.721" cy="178.414" r="1.838"/>
            <circle fill="#402A8C" cx="270.397" cy="185.251" r="1.838"/>
            <circle fill="#402A8C" cx="280.753" cy="168.251" r="1.838"/>
            <circle fill="#402A8C" cx="281.633" cy="192.603" r="1.838"/>
            <circle fill="#402A8C" cx="275.24" cy="190.765" r="1.838"/>
            <circle fill="#402A8C" cx="285.309" cy="174.739" r="1.838"/>
            <circle fill="#402A8C" cx="287.672" cy="183.414" r="1.838"/>
            <circle fill="#402A8C" cx="292.526" cy="178.414" r="1.838"/>
            <circle fill="#402A8C" cx="285.834" cy="197.677" r="1.838"/>
            <circle fill="#402A8C" cx="279.796" cy="201.501" r="1.838"/>
            <circle fill="#402A8C" cx="281.634" cy="211.927" r="1.838"/>
            <circle fill="#402A8C" cx="274.581" cy="208.251" r="1.838"/>
            <circle fill="#402A8C" cx="280.752" cy="185.252" r="1.838"/>
            <circle fill="#402A8C" cx="277.077" cy="178.414" r="1.838"/>
        </g>
    </g>
</g>
</svg>

当然,这只是个例子。在项目中,我没有在AI软件里直接写JavaScript脚本,只是把图形描出来,事件还是在专业的前端编辑器里编写比较方便(有提示,哈哈哈)。

脑洞大开,UI和前端配合,能做出多么炫酷的页面。
最后,恭喜我的小项目如期上线。感谢某开发工程师给编写了自动化,如果没有他,天知道要给多少个楼宇手动加事件。
也恭祝UI设计者的设计稿一次过!前端代码0修改!
O(∩_∩)O哈哈~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,050评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,538评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,673评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,622评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,047评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,974评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,129评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,893评论 0 209
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,654评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,828评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,297评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,619评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,326评论 3 243
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,176评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,975评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,118评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,909评论 2 278

推荐阅读更多精彩内容