Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

调整__follow里面对anchor可见性的判断方式 #6

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

shuizhongyueming
Copy link

之前是用anchor的offset的left和top都不为0作为判断是否可见的依据。这
个判断方式有点不够严谨,因为一个元素的可见与否,与它的offset没有
直接关联的,应该相关联的属性是width和height是否都大于0。

所以改成使用jquery的:hidden选择器来进行判断。

同时新增了测试文件visible.html 用来测试anchor可见,不可见,在视窗
之外和一半在视窗之外,show(anchor)能否正常工作。

之前是用anchor的offset的left和top都不为0作为判断是否可见的依据。这
个判断方式有点不够严谨,因为一个元素的可见与否,与它的offset没有
直接关联的,应该相关联的属性是width和height是否都大于0。

所以改成使用jquery的:hidden选择器来进行判断。

同时新增了测试文件visible.html 用来测试anchor可见,不可见,在视窗
之外和一半在视窗之外,show(anchor)能否正常工作。
去掉了对anchor是否hidden的判断,hidden的时候offset也是有的,是可以定
位过去的。

一开始的popup的策略是如果anchor有从top或left方向超出viewport,就视为
popup会无法显示全,从而强制popup居中显示。

这种策略会有些问题,比如一个anchor在top方向,有超出viewport一部分,
但是popup是设置的align: bottom。其实这个时候是可以完整显示popup的。

后面在没有完整理解以前开发者思路的情况下,把这个策略改成了:
判断anchor是否可见,如果不可见则居中popup。这个既没有很好的解决
anchor完全从top或者left方向超出viewport时,可能导致的popup定位过去
也不可见的问题。同时还使得hidden的元素无法用来作为anchor。

鉴于上面的问题,最终是在计算所有的定位完毕之后,遍历css对象,如果
有值为负值,则说明此时popup是会有部分不能展示的。同时定义了一个
属性isCenterForFallback,用来确定在这个时候,是让popup就按计算出来
的样式进行定位,还是强制的进行居中定位。

同时为了方便用户在遇到此类[莫名居中]问题的时候能够快速定位,新增了
__log方法和debug状态,这样在开发过程中,就可以查看log信息知道原因
并按照自己的需求调整设定了。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant