SVG捕捉鼠標(biāo)位置動態(tài)添加元素

<template>
    <div class="platform">
        <div class="svg-div" id="canvas"></div>
    </div>
</template>

<script>

export default {
    name: 'platform',
    
    data() {
        return {}
    },
    
    mounted() {
        this.svgLoad()
    },
    methods: {
        
        svgLoad() {
            var ming = 'http://www.w3.org/2000/svg'
            // 獲取畫布
            var canvas = document.getElementById('canvas')
            // 新建svg根元素用createElementNS
            var oSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
            oSvg.setAttribute('id', 'showsvg')
            oSvg.setAttribute('fill', 'red')
            oSvg.setAttribute('width', '100%')
            oSvg.setAttribute('height', '100%')
            canvas.appendChild(oSvg)

            var oPolyLine = null

            var pointsNum = ''

            var lineText = null

            function createTag(tagName, tagAttr) {
                let tag = document.createElementNS(ming, tagName)

                for (var attr in tagAttr) {
                    tag.setAttribute(attr, tagAttr[attr])
                }

                return tag
            }

            var obj = document.querySelectorAll('.platform')[0]
            // 監(jiān)聽svg鼠標(biāo)事件
            oSvg.onmousedown = function(ev) {
                if (!oPolyLine) {
                    oPolyLine = createTag('polyline', {
                        fill: 'none',

                        stroke: 'red',

                        'stroke-width': '2'
                    })

                    oSvg.appendChild(oPolyLine)
                }

                var x = ev.clientX - obj.offsetLeft - 20

                var y = ev.clientY - obj.offsetTop

                if (pointsNum == '') {
                    pointsNum = x + ',' + y
                } else {
                    pointsNum += ',' + x + ',' + y
                }

                var theText = createTag('text', {
                    //繪制鼠標(biāo)移動位置坐標(biāo)

                    fill: 'red'
                })

                oSvg.appendChild(theText)

                oPolyLine.setAttribute('points', pointsNum)

                theText.setAttribute('x', x)

                theText.setAttribute('y', y - 30)

                theText.innerHTML = x + ',' + y
                // 右鍵單擊
                if (ev.button === 0) {
                    var oCircle = createTag('rect', {
                        x: x,
                        y: y,
                        width: 20,
                        height: 10,
                        fill: 'white',
                        stroke: 'red',
                        'stroke-width': 3
                    })

                    oSvg.appendChild(oCircle)
                } else {
                    oSvg.onmousemove = function(ev) {
                        //鼠標(biāo)移動事件

                        var ev = ev || window.event

                        if (!lineText) {
                            //顯示鼠標(biāo)移動坐標(biāo)

                            lineText = createTag('text', {
                                fill: 'red',

                                x: ev.clientX - obj.offsetLeft,

                                y: ev.clientY - obj.offsetTop
                            })

                            var x = ev.clientX - obj.offsetLeft

                            var y = ev.clientY - obj.offsetTop

                            lineText.innerHTML = x + ',' + y

                            oSvg.appendChild(lineText)
                        } else {
                            var x1 = ev.clientX - obj.offsetLeft

                            var y1 = ev.clientY - obj.offsetTop

                            lineText.setAttribute('x', x1)
                            lineText.setAttribute('y', y1)

                            lineText.innerHTML = x1 + ',' + y1
                        }

                        if (oPolyLine) {
                            var x = ev.clientX - obj.offsetLeft - 20

                            var y = ev.clientY - obj.offsetTop

                            oPolyLine.setAttribute('points', pointsNum + ',' + x + ',' + y)
                        }
                    }
                }
            }
        }
    }
}
</script>
<style lang="scss" scoped>

.platform {
    height: 100%;

    .svg-div {
        height: 100%;
        background: rgb(18, 70, 119);
    }
}
</style>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末急但,一起剝皮案震驚了整個濱河市涩澡,隨后出現(xiàn)的幾起案子四康,更是在濱河造成了極大的恐慌圃庭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件混聊,死亡現(xiàn)場離奇詭異震蒋,居然都是意外死亡,警方通過查閱死者的電腦和手機野瘦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門描沟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飒泻,“玉大人,你說我怎么就攤上這事吏廉∨⒁牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵席覆,是天一觀的道長史辙。 經(jīng)常有香客問我,道長佩伤,這世上最難降的妖魔是什么聊倔? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮生巡,結(jié)果婚禮上耙蔑,老公的妹妹穿的比我還像新娘。我一直安慰自己障斋,他們只是感情好纵潦,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垃环,像睡著了一般邀层。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遂庄,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天寥院,我揣著相機與錄音,去河邊找鬼涛目。 笑死秸谢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的霹肝。 我是一名探鬼主播估蹄,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沫换!你這毒婦竟也來了臭蚁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讯赏,失蹤者是張志新(化名)和其女友劉穎垮兑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漱挎,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡系枪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了磕谅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片私爷。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡雾棺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出当犯,到底是詐尸還是另有隱情垢村,我是刑警寧澤割疾,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布嚎卫,位于F島的核電站,受9級特大地震影響宏榕,放射性物質(zhì)發(fā)生泄漏拓诸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一麻昼、第九天 我趴在偏房一處隱蔽的房頂上張望奠支。 院中可真熱鬧,春花似錦抚芦、人聲如沸倍谜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尔崔。三九已至,卻和暖如春褥民,著一層夾襖步出監(jiān)牢的瞬間季春,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工消返, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留载弄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓撵颊,卻偏偏與公主長得像宇攻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子倡勇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355