1. 程式人生 > >JavaScript滑鼠跟隨顯示內容

JavaScript滑鼠跟隨顯示內容

需求來自於地圖繪製圖形時想要提示內容比如“單擊左鍵開始繪製”“雙擊左鍵結束繪製”,在此封裝一個滑鼠跟隨提示的方法,要在vue裡使用可相應做一下調整

效果如下:(截圖無法截出滑鼠,可直接執行程式碼檢視效果)

實際專案應用效果:

程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>滑鼠跟隨方法封裝</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        html,body{
            width:100%;
            height:100%;
        }
        #map{
            position:relative;
            width:400px;
            height:400px;
            margin:300px auto;
            border-radius:8px;
            -webkit-box-shadow: 0 0 15px 2px rgba(0,0,0,.3);
            -moz-box-shadow: 0 0 15px 2px rgba(0,0,0,.3);
            box-shadow: 0 0 15px 2px rgba(0,0,0,.3);
            cursor:pointer;
        }
        #map:hover{
            -webkit-box-shadow: 0 0 30px 2px rgba(0,0,0,.3);
            -moz-box-shadow: 0 0 30px 2px rgba(0,0,0,.3);
            box-shadow: 0 0 30px 2px rgba(0,0,0,.3);
        }
    </style>
</head>
<body>
<div id="map"></div>
<script>
    window.onload = function () {
        // -------使用方法
        var myMap = document.getElementById('map')
        var mapLeft = myMap.offsetLeft
        var mapTop = myMap.offsetTop  -  document.documentElement.scrollTop
        var myHint = document.createElement('div')
        myHint.style.position = 'absolute'
        myMap.appendChild(myHint)
        WordsFollowMouseDOM(myMap, myHint, mapLeft, mapTop, 1)
        // -------使用方法
    }
    /**
     * 滑鼠跟隨提示
     * param:
     * myMap-在此區域內有滑鼠跟隨提示,超出區域則沒有
     * myHint-新建的跟隨內容區域
     * mapLeft-活動區域距離瀏覽器工作區左側距離
     * mapTop-活動區域距離瀏覽器工作區頂側距離
     * hintwords:1-單擊左鍵開始繪製、2-雙擊左鍵結束繪製、其他值-不顯示跟隨資訊
     **/
    function WordsFollowMouseDOM(myMap, myHint, mapLeft, mapTop, hintwords) {
        myMap.addEventListener('mousemove', function(e) {
            myHint.style.minWidth = '100px'
            myHint.style.left = e.clientX - mapLeft + 10 + 'px'
            myHint.style.top = e.clientY - mapTop + 2 + 'px'
            myHint.style.backgroundColor = 'rgba(52,126,255,0.6)'
            myHint.style.padding = '2px 4px'
            myHint.style.fontSize = '12px'
            myHint.style.color = '#fff'
            myHint.style.borderRadius = '2px'
            myHint.style.fontWeight = '10'
            switch (hintwords) {
                // 狀態可根據實際需求變更
                case 1:
                    myHint.innerHTML = '單擊左鍵開始繪製'
                    myHint.style.display = 'block'
                    break
                case 2:
                    myHint.innerHTML = '雙擊左鍵結束繪製'
                    myHint.style.display = 'block'
                    break
                default:
                    myHint.innerHTML = ''
                    myHint.style.display = 'none'
                    break
            }
        })
        myMap.addEventListener('mouseout', function(e) {
            myHint.innerHTML = ''
            myHint.style.display = 'none'
        })
    }
</script>
</body>
</html>