js 悬浮框 光标位置 页面滚动后的光标位置

想要写一个悬浮框,当划过某个区域的时候,这个悬浮框显示,光标在哪,悬浮框就在哪。

思路是:定义一个DIV,初始化时使之display: none,在光标划过指定位置时,将此DIV设置为display: block。使用onmouseover事件和onmouseout事件。

 

1.定义DIV

1 <div id="operationDiv"  onmouseover="showDetail();" onmouseout="hideDetail();">
2      <asp:CheckBoxList ID="cblComments" runat="server" OnSelectedIndexChanged="cblComments_SelectedIndexChanged" AutoPostBack="true">
3           <asp:ListItem Text="Agree" Value="Agree" onclick="CheckCBLSimpleSelect(this)"></asp:ListItem>
4           <asp:ListItem Text="Disagree" Value="Disagree" onclick="CheckCBLSimpleSelect(this)"></asp:ListItem>
5      </asp:CheckBoxList>
6 </div>

其中onmouseover和onmouseout是我们需要用的事件,绑定对应的js方法。

2.悬浮框的显示和隐藏 js方法

悬浮框内显示的内容我已赋在hidShowDetail内。

 1 //Display checked CheckBoxList number
 2         function showDetail() {
 3             var displayStr = document.getElementById("hidShowDetail").value;
 4             var pointPosition = getCursorPosition(window.event);//get point relative position
 5             document.getElementById("TotalSelectDIV").style.display = "block";
 6             document.getElementById("TotalSelectDIV").style.left = pointPosition[0] + "px";
 7             document.getElementById("TotalSelectDIV").style.top = pointPosition[1] + "px";
 8             document.getElementById("TotalSelectNum").innerText = displayStr;
 9 
10         }
11 
12         //Hide checked CheckBoxList number
13         function hideDetail() {
14             document.getElementById("TotalSelectNum").innerText = "";
15             document.getElementById("TotalSelectDIV").style.display = "none";
16         }

其中getCursorPosition方法是为了获取当前光标位置,以前是用window.event.clientX + "px"和 window.event.clientY + "px"来表示光标的坐标,但因为页面滚动,获取的位置不对。后来查到了一个,不管页面如何滚动,都可以获取到实际光标的位置getCursorPosition方法。参考:https://blog.csdn.net/liangshui999/article/details/95059015

 1 function getCursorPosition(event) {
 2             var position = [0, 0];
 3             var scrollingPosition = getScrollingPosition();
 4             if (typeof event == "undefined") {
 5                 event = window.event;
 6             }
 7             if (typeof event.pageX != 'undefined') {
 8                 position = [event.pageX, event.pageY];
 9             } else {
10                 position = [event.clientX + scrollingPosition[0], event.clientY + scrollingPosition[1]];
11             }
12             return position;
13         }
14 
15         function getScrollingPosition() {
16             var position = [0, 0];
17             if (typeof window.pageXOffset != 'undefined') {
18                 position = [window.pageXOffset, window.pageYOffset];
19             } else if (typeof document.documentElement.scrollTop != 'undefined' &&
20                 (document.documentElement.scrollTop > 0 || document.documentElement.scrollLeft > 0)) {
21                 position = [document.documentElement.scrollLeft, document.documentElement.scrollTop];
22             } else if (typeof document.body.scrollLeft != 'undefined') {
23                 position = [document.body.scrollLeft, document.body.scrollTop];
24             }
25             return position;
26         }

 

posted on 2022-11-30 10:28  张不胖  阅读(148)  评论(0编辑  收藏  举报

导航