最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js弹出菜单/窗口效果_javascript技巧

来源:懂视网 责编:小采 时间:2020-11-27 21:01:17
文档

js弹出菜单/窗口效果_javascript技巧

js弹出菜单/窗口效果_javascript技巧:是不是应该为弹出菜单提供更好的可访问支持?这篇文章将涉及到3种常见的弹窗: window.open 新建的浏览器窗口 创建的窗口 页面 DOM 创建的伪弹出窗口:如弹出 tips 等 一、当页面无 JS 的时候 通常来说,无 JS 的情况那就按 HTML 的行为来做事。让链接
推荐度:
导读js弹出菜单/窗口效果_javascript技巧:是不是应该为弹出菜单提供更好的可访问支持?这篇文章将涉及到3种常见的弹窗: window.open 新建的浏览器窗口 创建的窗口 页面 DOM 创建的伪弹出窗口:如弹出 tips 等 一、当页面无 JS 的时候 通常来说,无 JS 的情况那就按 HTML 的行为来做事。让链接

是不是应该为弹出菜单提供更好的可访问支持?这篇文章将涉及到3种常见的弹窗:

window.open 新建的浏览器窗口
创建的窗口
页面 DOM 创建的伪弹出窗口:如弹出 tips 等

一、当页面无 JS 的时候
通常来说,无 JS 的情况那就按 HTML 的行为来做事。让链接可以链接,就已经解决。比较简单,我们简单带过:

1. window.open 新建的浏览器窗口:尽量让 JS 触发器绑定在 上,并把 a 链接到一个新的页面,即可。
代码如下:
// 链接与 window.open 的目标相同
[open window]
// 记得阻止链接有默认行为,不然有 JS 的时候会打开两次
window.open('./iframe.html', 'name', 'height=300,width=500');
return false;

2. 创建的窗口:如果是用 JS 动态创建的,那么记得触发器也应该像 window.open 的方法一样,把解法链接写在一个 上,让用户通过链接来访问。而如果是隐藏的,那么尽量来使用

[open iframe]

// js
document.getElementById('theframe').src = '/target.html'

3. 页面 DOM 创建的伪弹出窗口:使用

预览:可访问弹出菜单/窗口

1. window.open 新建的浏览器窗口:focus 到新建的窗口即可。
代码如下:
// 引用自:QuickMode - popups
function popitup(url) {
newwindow=window.open(url,'name','height=200,width=150');
if (window.focus) {
// focus 到新建窗口
newwindow.focus();
}
// 阻止触发器的默认行为
return false;
}

2. 创建的窗口:调试了好久,IE8/9 需要等 iframe onload 成功后 setTimeout 来 hack;firefox 不能使用 ifrcontentWindow.focus(),只能用 iframe.focus()。综合起来需要这样的代码:
代码如下:
// for all except firefox
setTimeout(function(){
f.contentWindow.focus();
}, 50);

// hack for firefox
navigator.userAgent.toLowerCase().indexOf('firefox') !== -1 && f.focus();

3. 页面 DOM 创建的伪弹出窗口:对于 dom,除了 等这些 focusable 元素(W3C SPEC),都是不可以 focus 的。那么当需要 focus 到一个 div 时,我们有什么方法可以做到呢?通常来说,我们可以设置 Tabindex 来让像 这样的非 focusable 元素可以触发 focus 事件。但我们想要的时真正 focus 到一个地方,以便于使用 tab 来访问这个区域的内容,所以这种方法对我们等于无用。

目前还没有比较好的方法(对于我能想到的和找到的),所以目前来说,我们只能利用一个 focusable 元素来创建 focus 目标。我们可以这样做:

Get focus

但问题是,对于这个链接对于我们来说是毫无作用的,我们需要隐藏他,又能 focus 到。但 display:none 的时候是不能 focus 的。对于隐藏 来说,这里也不想说太多。推荐看看这篇文章:使用clip隐藏内容。那么我们可以这样来 hack 我们的这个链接:
代码如下:
// html: 注意用 hidefocus 来删除虚线框
Get focus

// CSS: 使用 clip
.getfocus{
position:relative;
clip:rect(1px 1px 1px 1px);
clip:rect(1px, 1px, 1px, 1px);
}

// javascript: 记得把 放在这个 DOM 结构的最前面方便自上至下 tab 下去
a.focus()

三、总结:
至此,重要的技术实现点也已经说明白。代码请见这个粗陋的 DEMO,虽然只是没有特别优化的一段代码,但相信可以解决很多问题。对于可访问性,我们要走的路还有很多。一点点来吧,从今天开始。

文档

js弹出菜单/窗口效果_javascript技巧

js弹出菜单/窗口效果_javascript技巧:是不是应该为弹出菜单提供更好的可访问支持?这篇文章将涉及到3种常见的弹窗: window.open 新建的浏览器窗口 创建的窗口 页面 DOM 创建的伪弹出窗口:如弹出 tips 等 一、当页面无 JS 的时候 通常来说,无 JS 的情况那就按 HTML 的行为来做事。让链接
推荐度:
标签: 菜单 窗口 弹出
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top