如何获得Chrome浏览器的可视区域左上角的屏幕坐标,IE中可用的属性不行

9527 2016-09-02 02:02:22
在IE中,我使用window.screenLeft和window.screenTop来获得浏览器的可视区域的左上角坐标,通过他可以得到网页中的任何元素的绝对坐标,进而使用C++程序进行截屏处理
但是在Chrome中window.screenTop代表的是包含菜单栏、地址栏在内的浏览器区域的左上角坐标,举例来说,就是如果把浏览器全屏最大化,在Ie中window.screenTop获得的值是非零的,而Chrome获得是零。
请问大家有什么方法可以得到这个实际可视区域的绝对屏幕坐标,非常感谢
...全文
791 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
9527 2016-10-01
  • 打赏
  • 举报
回复
引用 8 楼 chenge1980 的回复:
比如下载一个东西,chrome就有状态栏了
那就只能用鼠标监控事件来做了,我现在主要是为了获取视频播放位置,所以一般不用考虑下载的情况。
大脚板 2016-09-30
  • 打赏
  • 举报
回复
比如下载一个东西,chrome就有状态栏了
9527 2016-09-23
  • 打赏
  • 举报
回复
引用 6 楼 chenge1980 的回复:
这样做应该是不对的吧,如果浏览器下方有状态栏,这个坐标是有偏差的 [quote=引用 5 楼 9527 的回复:] [quote=引用 3 楼 jslang 的回复:] 可以通过事件对象event的鼠标坐标来计算

<script type="text/javascript">
function getScreen(e) {
    var x = e.screenX - e.clientX;
    var y = e.screenY - e.clientY;
        alert("X坐标:" + x + ",Y坐标:" + y);
    }
</script>
<input type="button" onclick="getScreen(event)" value="测试" />

谢谢jslang的帮助,关联鼠标运动的方法,我昨天下午也尝试过,不过存在一点小小的问题,就是如果仅仅用这个方法,没法同时兼顾Chrome浏览器和360浏览器。因为这两个浏览器的window.screenTop 实现不一样,如果统一加上一个偏移量,在两者之一的浏览器中就会出问题。我现在的做法是这样的:

var ShiftCorrectMethod = 0; //修正获取浏览器可视区域左上角坐标位置的方法类型,
    // 模式0是采用window.outerWidth - window.innerWidth方法修正
    // 模式1是采用鼠标活动事件关联方法

/**
 * 获得可视区域左上角的X屏幕坐标
 * @returns {*}
 */
function getViewAreaLeft() {
    if (ShiftCorrectMethod == 0) {
        return window.screenLeft + (window.outerWidth - window.innerWidth);
    } else {
        if (window.bodyOffset)
            return window.screenLeft + window.bodyOffset[0];
        else
            return window.screenLeft;
    }
}

/**
 * 获得可视区域左上角的Y屏幕坐标
 * @returns {*}
 */
function getViewAreaTop() {
    if (ShiftCorrectMethod == 0) {
        return window.screenTop + (window.outerHeight - window.innerHeight);
    } else {
        if (window.bodyOffset)
            return window.screenTop + window.bodyOffset[1];
        else
            return window.screenTop;
    }
}
再次谢谢大家的热心帮助[/quote][/quote] 360安全浏览器的window.screenTop和IE是一样的,但是和Chrome不一样,也就是不存在此问题,Chrome一般没有状态栏
大脚板 2016-09-09
  • 打赏
  • 举报
回复
这样做应该是不对的吧,如果浏览器下方有状态栏,这个坐标是有偏差的
引用 5 楼 9527 的回复:
[quote=引用 3 楼 jslang 的回复:] 可以通过事件对象event的鼠标坐标来计算

<script type="text/javascript">
function getScreen(e) {
    var x = e.screenX - e.clientX;
    var y = e.screenY - e.clientY;
        alert("X坐标:" + x + ",Y坐标:" + y);
    }
</script>
<input type="button" onclick="getScreen(event)" value="测试" />

谢谢jslang的帮助,关联鼠标运动的方法,我昨天下午也尝试过,不过存在一点小小的问题,就是如果仅仅用这个方法,没法同时兼顾Chrome浏览器和360浏览器。因为这两个浏览器的window.screenTop 实现不一样,如果统一加上一个偏移量,在两者之一的浏览器中就会出问题。我现在的做法是这样的:

var ShiftCorrectMethod = 0; //修正获取浏览器可视区域左上角坐标位置的方法类型,
    // 模式0是采用window.outerWidth - window.innerWidth方法修正
    // 模式1是采用鼠标活动事件关联方法

/**
 * 获得可视区域左上角的X屏幕坐标
 * @returns {*}
 */
function getViewAreaLeft() {
    if (ShiftCorrectMethod == 0) {
        return window.screenLeft + (window.outerWidth - window.innerWidth);
    } else {
        if (window.bodyOffset)
            return window.screenLeft + window.bodyOffset[0];
        else
            return window.screenLeft;
    }
}

/**
 * 获得可视区域左上角的Y屏幕坐标
 * @returns {*}
 */
function getViewAreaTop() {
    if (ShiftCorrectMethod == 0) {
        return window.screenTop + (window.outerHeight - window.innerHeight);
    } else {
        if (window.bodyOffset)
            return window.screenTop + window.bodyOffset[1];
        else
            return window.screenTop;
    }
}
再次谢谢大家的热心帮助[/quote]
9527 2016-09-03
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
可以通过事件对象event的鼠标坐标来计算

<script type="text/javascript">
function getScreen(e) {
    var x = e.screenX - e.clientX;
    var y = e.screenY - e.clientY;
        alert("X坐标:" + x + ",Y坐标:" + y);
    }
</script>
<input type="button" onclick="getScreen(event)" value="测试" />

谢谢jslang的帮助,关联鼠标运动的方法,我昨天下午也尝试过,不过存在一点小小的问题,就是如果仅仅用这个方法,没法同时兼顾Chrome浏览器和360浏览器。因为这两个浏览器的window.screenTop 实现不一样,如果统一加上一个偏移量,在两者之一的浏览器中就会出问题。我现在的做法是这样的:

var ShiftCorrectMethod = 0; //修正获取浏览器可视区域左上角坐标位置的方法类型,
    // 模式0是采用window.outerWidth - window.innerWidth方法修正
    // 模式1是采用鼠标活动事件关联方法

/**
 * 获得可视区域左上角的X屏幕坐标
 * @returns {*}
 */
function getViewAreaLeft() {
    if (ShiftCorrectMethod == 0) {
        return window.screenLeft + (window.outerWidth - window.innerWidth);
    } else {
        if (window.bodyOffset)
            return window.screenLeft + window.bodyOffset[0];
        else
            return window.screenLeft;
    }
}

/**
 * 获得可视区域左上角的Y屏幕坐标
 * @returns {*}
 */
function getViewAreaTop() {
    if (ShiftCorrectMethod == 0) {
        return window.screenTop + (window.outerHeight - window.innerHeight);
    } else {
        if (window.bodyOffset)
            return window.screenTop + window.bodyOffset[1];
        else
            return window.screenTop;
    }
}
再次谢谢大家的热心帮助
9527 2016-09-03
  • 打赏
  • 举报
回复
引用 2 楼 Free_Wind22 的回复:
screen.availHeight - window.innerHeight 
非常感谢Free_Wind22的回复,在您和另外一个网友的启发下,我使用了window.outerWidth代替screen.availHeight ,配合window.screenTop 一起使用,达到了我的目的,目前在Chrome和360浏览器下测试,暂时没注意到有问题
天际的海浪 2016-09-02
  • 打赏
  • 举报
回复
可以通过事件对象event的鼠标坐标来计算

<script type="text/javascript">
function getScreen(e) {
    var x = e.screenX - e.clientX;
    var y = e.screenY - e.clientY;
        alert("X坐标:" + x + ",Y坐标:" + y);
    }
</script>
<input type="button" onclick="getScreen(event)" value="测试" />

2016-09-02
  • 打赏
  • 举报
回复
screen.availHeight - window.innerHeight 
9527 2016-09-02
  • 打赏
  • 举报
回复
走过路过,不要错过啊

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧