Skip to content
Menu
Yuuk的博客
  • 首页
  • 前端技术
    • JavaScript
    • HTML & CSS
  • SEO
  • 设计
    • 素材分享
    • 设计教程
  • 随笔
Yuuk的博客

jQuery offset()和position()方法不生效的原因

Posted on 2015年7月9日2016年10月5日 by yuuk

最近工作项目中,需要做一个下拉导航,类似下图所示的效果。鼠标划过下拉父级菜单,下拉出子栏目,大家可以看到,整个下拉菜单的宽度比较宽,下拉菜单又是相对父级导航栏目定位,那么问题来了… 当鼠标划过靠近页面右侧的父级导航栏目时就会出现下拉菜单超出屏幕。这时就动态计算下拉菜单是否超出页面。

如何计算?

计算方法其实很简单,先计算出页面距离浏览器右边的距离:屏幕宽度 – 页面主宽度(比如1200px)/ 2

接下来计算下拉菜单距离页面右侧的距离:屏幕宽度 – 下拉菜单宽度 – 下拉菜单距离页面左边的距离

如果下拉菜单距离页面右侧的距离大于页面距离浏览器右边的距离则证明超出了范围,需要对下拉菜单重新设置定位方式。

这里用jQuery写一下上面计算的代码:

var pageRightWidth = ($(window).width() - $("#page").width()) / 2;
var subMenuRightWidth = $(window).width() - $(".submenu").width() -  $(".submenu").offset().left;

那么这里问题又来了,计算下拉菜单距离页面右侧的距离时,发现一直获取不到offset().left,获取的数值一直等于0,最后发现,需要先让下拉菜单显示出来,才能有效的获取offset().left,隐藏的元素是获取不到的。

打赏赞(1)分享

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

搜索

近期文章

  • 宝塔面板中使用docker部署nodejs应用
  • 如何将docker镜像上传到阿里云
  • React Native 报错 No bundle URL present 解决方法
  • axios 给每一个请求添加耗时统计
  • css filter属性导致fixed失效

标签

addEventListener ajax ajax跨域 chatAt css居中 DNS缓存 docker gulp ie7 json jsonp margin memcache mysql nodejs ps技巧 typescript void vpn vuejs wampserver webpack win10 XMLHttpRequest z-index 事件冒泡 事件绑定 内容发布时间 图片加载 大写 字符串 封装ajax 广告屏蔽 批量修改图层名称 水平垂直居中 注册码 特殊符号 百度 空元素 站长平台 网页快照 负边界 递减 随机数 首字母

友情链接

  • 蔡甸新闻网
©2025 Yuuk的博客 | 鄂ICP备13014750号-9