在上一篇关于SitePoint的文章中 ,我质疑屏幕阅读器是否可以使用AJAX脚本技术,并发现在大多数情况下它们是不可行的 。 这样做令人失望-指出一个问题而无法提供任何答案。 但是我真的别无选择,因为据我所知,没有任何具体的解决方案可以提供。 (尽管自那时以来,其他开发人员进一步扩大了界限 ;特别重要的是Gez Lemon和Steve Faulkner在这一领域所做的工作 。)
但是可访问性并不总是那么困难! 我对这一事实感到非常敏感,因为许多人将其视为一大堆问题,而实际上可访问性只是另一个设计挑战,通常,它比其他任何问题都没有困难或问题。 AJAX是一个特别尴尬的示例。 但是,在大多数情况下,提供可访问性确实并不难。
您不能总是得到想要的东西。 但是如果您有时尝试,您可能会发现,您会得到所需的东西。
—滚石
在本文中,我想对那些尝试使其Web应用程序可访问的用户表示满意。 为了实现这一点,在介绍与设备无关的脚本时,我将讨论与JavaScript可访问性相关的一些更基本的可解决问题。
键盘导航?
我们大多数人在大多数图形界面导航中都使用鼠标,但是有些人不能,因此必须使用键盘来导航。 例如,对于患有手部震颤的人来说,有效使用鼠标所需的精确控制可能根本就不可能。 对于屏幕阅读器等辅助技术的用户,键盘是主要的交互方法。 毕竟,在看不见指针的情况下使用鼠标相当困难!
提供键盘访问权限也可以创建更好的可用性,因为尽管如此,许多可以使用鼠标的人还是喜欢在某些任务或特定时间使用键盘。 这些人通常是高级用户-通常更熟悉计算机工作原理的人员,并期望能够根据需要使用鼠标或键盘与功能进行交互。
如果您不习惯使用键盘浏览网站,请立即尝试! 花一些时间在自己的网站上以及经常访问的其他网站上,以感受一下不用鼠标冲浪的感觉。 发现出现问题的地方,并思考如何避免这些问题。
设备独立!
提到“键盘”访问总是有点误导,因为它不仅仅是我们在谈论的键盘本身。 我们正在谈论尝试提供设备独立性,以便无论用户的交互方式如何,他们都可以使用脚本。
例如,鼠标事件可能根本不会由鼠标生成。 它们可能是由于轨迹球或手持游戏机上的模拟摇杆的移动引起的。 焦点事件可能是由键盘用户使用Tab键导航或由Opera用户使用浏览器的语音控制功能说出的导航命令产生的。
从理论上讲,我们希望能够支持任何交互方式,而不管输入设备如何。 但是实际上,所有这些形式的交互通常可以归结为两种基本类型之一:“鼠标”(单击或移动界面元素)和“键盘”(通过字符输入提供输入或指令)。 这些处理浏览器公开的事件的两个相当谨慎的子集,而忽略了大多数编程事件(加载,错误等)。
三大支柱
我假设您已经非常熟悉鼠标事件的脚本编写,并且仅查看键盘事件的脚本编写。 (如果您需要事件的介绍,以及对现代JavaScript技术在现实世界中使用情况的详细介绍,则可以阅读我的书 。)为此,我要讨论三件事:三件事您可能会说“支柱”,它们共同为设备独立性奠定了基础:
提供可访问的交互式元素。
选择适当的触发元素。
旨在配对脚本挂钩,而不是事件挂钩。 这些术语现在可能没有意义,但是到您阅读完本文时,这些术语才有意义。
我也希望您牢记,当我们经历这些问题时,迎合可及性就是要提供等同性,这与等同性不同。 我们是否为不同的用户提供不同的路径并不一定要紧,只要每个人都有一条通往同等最终结果的路径即可。 稍后,当我们看一些实际的例子时,我们将看到甚至根本不同的方法如何整体上也可以导致等效的结果。
提供可访问的交互式元素
首先,如果要捕获来自键盘的输入,则需要使用可以接受焦点的元素:主要是链接(
)和表单控件(
,
,
和
)。 请注意,还可以将焦点分配给图像映射中的
元素,
或
,在某些情况下还可以将
(取决于其嵌入的数据类型),并且在大多数情况下浏览器,文档或documentElement本身。
对于这些交互,我们只能处理的事件是键盘实际上可以生成的事件:主要是focus
, blur
(当当前聚焦的元素失去焦点时触发), click
(通过键盘激活链接或按钮在编程上与单击相同)。 (使用鼠标),以及三个按键操作事件( keydown
, keyup
和keypress
。
除了这些直接输入事件外,我们还可以使用编程事件-即响应状态变化而间接触发的事件。 编程事件的示例包括臭名昭著的window.onload
事件和XMLHttpRequest
对象的onreadystatechange
事件。
我们还可以使用与模式无关的事件,即,用户的交互方式对他们的触发方式或触发时间没有任何影响的事件,例如表单的提交事件。
但是,这是一个重要的警告,这并不意味着我们不必将特定于鼠标的事件分配给垃圾箱,也不必将不可聚焦的元素完全放到边线。 这仅意味着我们将不得不重新考虑某些任务的方法。 请记住,这是关于等价而不是平等。 只要每个用户都可以访问其中至少一个,所有路径都是好的。
选择适当的触发元素
我使用术语“触发元素”来指代任何用于触发行为响应的元素。 触发元素是用户与之交互以便引起其他事情发生的东西。 这可能是指向flickr上的照片“添加标签”的简单链接:
或者它可以在照片的顶部包含一系列图标,旨在允许用户执行诸如将照片添加到自己的收藏夹中的操作:
但是,正如我们已经指出的,实现这些触发器可用的元素的选择是有限的。
现在,
元素是我的特别喜欢的元素,因为它非常灵活:它可以像其他任何元素一样设置样式,可以包含其他HTML,可以启用或禁用,并将状态报告给用户代理,并且它可以用作活动触发元素而没有任何值。 但是,像所有
元素一样,其唯一有效的上下文在
内部。
相比之下,使用链接作为触发器的问题在于,尽管可以使它们以任何喜欢的方式出现,但是它们始终必须具有某种值:键盘上的href属性中没有任何内容的链接是不可访问的。
通常公认的最佳实践是使用渐进增强功能 -包括指向等效的非脚本功能的默认href
属性-但这在我们完全脚本化的环境中工作(例如,处理链接)时不一定适当它本身是在满足其他地方非脚本用户的应用程序中通过脚本生成的。 这种情况通常导致需要链接具有“ #
”或“ javascript:void(null)
”或类似的(本质上是垃圾) href
。
但是,所有这一切都与要点无关,因为我们对元素的选择应基于触发器的实际作用和作用。 为了方便起见,我们不能仅使用
来避免链接问题,反之亦然。 我们必须考虑语义,并尝试确保触发元素看起来像是触发元素,并且其外观与其功能一致。
这并不总是那么容易。 flickr图标示例是一个特别棘手的示例。 让我们再来看一遍:
这些图标的整体外观表明它们是按钮,例如Photoshop或MS Office中的工具栏按钮。 但是从功能上讲,前三个是脚本操作,而最后一个实际上是指向另一个页面的链接。
因此,前三个应该是
元素,而最后一个是
吗? 也许“所有尺寸”应该是一个单独的链接,而该链接根本不属于此工具栏?
那“添加标签”链接呢?
那不是一个按钮,而是一个按钮,因为它是脚本操作,而不是页面视图? (而且,当我们在使用它时,如果JavaScript不可用,它是否不应该做某些事情……?)
在这种情况下,总的结论可能是flickr的界面设计(与Web 2.0的大部分形式一样)只是一种偶然现象,并且没有经过深思熟虑。
但是,所有这一切确实很重要-语义不只是注视肚脐的一种练习。 元素的选择对用户代理非常重要,因为它们依赖于标记语义来识别内容是什么,而这又对希望有效使用该内容的普通用户而言至关重要。
如果您仍然觉得这仅仅是关于语义纯净的学术讨论,那么让我们看一个实际的示例,说明在现实世界中触发元素选择为何重要的原因:Opera的键盘导航。
Opera在导航表单元素时使用的键与在链接中导航时使用的键不同(表单元素使用Tab键,而链接导航在“ next。”和“ previous anchor”中分别使用“ A”和“ Q”)。 因此,如果我们使用看起来像链接按钮的界面元素,反之亦然,则将为使用键盘进行导航的Opera用户创建一个认知和可用性问题。 再举一个例子,让我们检查一下Basecamp在其Writeboard应用程序中的作用:
“编辑此页面”看起来像一个按钮,因此我们应该能够像其他按钮一样使用Tab键查看; 但是我们不能,因为它根本不是按钮。 这是一个样式链接。
毕竟,它应该是一个
,因为这就是它的样子。 还是应该只是(看起来像)一个简单的链接,因为它实际上所做的是加载整个新页面? 在这种情况下,我认为是后者。
就像我说的那样,这方面并不总是那么容易,但是如果应用程序要像使用键盘一样直观,就必须考虑它。 通常,我认为应该将链接用于加载新页面而不发布任何数据(即GET
请求)的操作,并且应将按钮或其他适当的表单小部件用于其他所有操作。 (毕竟,除了复杂形式之外,什么是应用程序?)。 HTTP 1.1规范回应了该视图,该规范指出GET请求不应用于将更改资源的操作,例如删除,创建或更新内容。
但是在所有情况下,触发器元素都必须看起来像它的样子。
寻找行为配对,而不是事件配对
用于WCAG 1.0的HTML技术建议,一种满足设备独立性的好方法是提供冗余输入事件-同一元素“配对”在一起的两个处理程序。 它提供的示例包括将keydown与mousedown配对,或使用keyup与mouseup搭配使用。
但是,这是解决提供设备独立性问题的错误方法,因为键盘和鼠标事件在概念上是不同的,并且在许多情况下,行为完全不同。 在我们的实际示例的第一部分中,我们将很快看到这种差异。
我认为从行为配对而非事件配对的角度进行思考会更有帮助。 如果您有一项功能是由mousedown事件驱动的,请不要认为:“如何使用keydown事件来使这项工作正常进行?” 只是想一想:“我如何才能通过键盘进行这项工作?”
我会劈头发吗? 我不这么认为。 当以这种方式考虑时,问题会导致不同的答案。 第一个问题询问一种特定的方法,该方法可能有效也可能无效。 第二个问题只是询问是否有方法; 它对任何兼容的解决方案都是开放的。 在最后一个实际示例中,“拖放”功能将使我们看到思维上的巨大差异。
一些实际的例子
让我们看一些实际的例子。 我不会在这里深入研究代码。 这只是对鼠标实现的一些不同类型脚本的基本回顾; 我们还将考虑如何在键盘上实现它们。
简单的滚动和显示内容
一个简单的过渡效果可能包括链接上的颜色或背景图像更改。 您可能比不熟悉应用了块显示的链接以及:hover
和:focus
伪类,以便它们可以进行后台交换而无需JavaScript。
只要使用适当的链接或其他可聚焦的元素(不只是纯文本内容元素,如
或 ),脚本化的过渡通常就很容易扩展到键盘。 在我们的第一个示例中,我们将通过切换类名(例如,使用假设的addEvent
函数)来触发单个元素的简单效果;当您在自己的工作中应用代码时,请替换为它 -您可以选择自己喜欢的):
addEvent(link, 'mouseover', function()
{
link.className = 'rollover';
});
addEvent(link, 'mouseout', function()
{
link.className = '';
});
我们可以简单地添加一对focus
和blur
处理程序,以对通过键盘导航的人们执行相同的工作:
addEvent(link, 'focus', function()
{
link.className = 'rollover';
});
addEvent(link, 'blur', function()
{
link.className = '';
});
当处理一组元素上的事件时,情况更加复杂,因为焦点事件不会冒泡。 当元素传递触发其父元素的事件时,就会发生事件冒泡。 虽然我们可以使用单个文档级侦听器(有时称为事件委托 )来处理任何元素上的鼠标事件,但对于不会冒泡的事件,我们不能做同样的事情:
addEvent(document, 'mouseover', function(e)
{
var target = typeof e.target != 'undefined'
? e.target : e.srcElement;
//"target" is whatever node the event bubbles up from
});
这种方法之所以有效,是因为鼠标事件从发生时起就冒出。 但是,由于焦点事件不会冒泡,因此此类功能将仅处理文档节点上发生的事件。
如果要捕获一组元素中每个元素上的事件,则必须遍历这些元素并将侦听器分别绑定到每个元素:
var links = list.getElementsByTagName('a');
for(var i=0; i
{
addEvent(links[i], 'focus', function()
{
//and so on ...
});
}
请记住,鼠标到键盘行为的确切转换不一定是正确的,因为这两种行为之间的可用性问题通常非常不同。 考虑DHTML菜单中的打开和关闭计时器。 这些对于鼠标是必需的,但对于键盘则是不希望的。 毕竟,用户使用键盘导航时不可能“滑出菜单”边缘,因此所有计时器都提供了无用的菜单暂停功能。
AJAX和其他RPC脚本
AJAX脚本编写的核心处理程序性事件,例如XMLHttpRequest
对象的onreadystatechange事件或用于数据检索的iframe的load事件。 用户的交互方式不会影响这些事件的行为,因此我们不需要特别考虑每种交互方式。
但是,我们确实有两个要考虑的重点。
首先,最明显的是,我们应该首先考虑如何触发这些过程。 如果要通过用户操作启动请求或过程,则必须确保该操作可以由键盘用户触发。 正如我们已经讨论过的,解决方案只是选择合适的触发元素。
第二个问题要求仔细构造响应HTML,以确保我们维持可用的制表符顺序。 如果我们响应用户的操作创建新内容,并且新内容本身是交互式的,则必须确保将其插入HTML中的逻辑点。
例如,假设我们有一个“用户首选项”表单,用户可以在其中指定其个人详细信息。 在这种情况下,他们必须提供原籍国信息:
Country:
UK
Australia
我们可以将onchange事件侦听器附加到select元素,该侦听器运行代码以创建辅助选择,允许用户选择适当的县或州。 但是,我们希望键盘用户可以立即访问辅助选择,因此我们应该将其插入正确的位置-在第一个标签之后,按钮之前:
var button = document.getElementById('save-button');
button.parentNode.insertBefore(newselect, button);
本示例假定已经创建了新的选择器和标签,并将其保存到对象引用newselect中。
拖放
无论您是否要使其可访问,“拖放”功能在最佳情况下都需要复杂的脚本编写! 乍一看,使此功能可访问的任务看起来是不可能的,因为拖动'n'的动作是mousemove事件,没有键盘等效项。 但是只要稍加思考,就可以做到!
想象一下,我们的应用程序包含一个垂直列表或垂直列的框,用户可以拖动'n'下拉框来重新排序。 用户的鼠标拾取一个对象,将其移动,然后将其捕捉到新位置; 动作的最终结果只是对象顺序的改变-用户拖动的对象已向上或向下移动了x个空格。 我们不能使用向上和向下箭头键生成的命令来达到相同的结果吗?
确实,我们可以,但是要做到这一点,我们需要键盘的触发元素:可聚焦的元素(可拖动对象本身或其中的某些东西),可以处理来自箭头键的事件。
在下图中,您可以看到一个指示鼠标行为的框。 顶部的暗条是鼠标的触发元素。 用户单击此区域并移动鼠标以拖动该框。 因此,此行为的主要活动事件是mousemove
:
现在,如果我们在可拖动元素内添加链接或按钮,并将其设置为看起来像图形图标的样式,则可以将该图标用作键盘的触发元素。 在这种推理方式下,该行为的主要活动事件是keypress
:
从这个例子中,我们可以看到事件配对是徒劳的。 mousemove和keypress事件之间几乎没有功能相似性,但是那是我们需要为鼠标和键盘用户提供的两个事件。 为了使此功能适用于键盘,我们逐步完成了概念上的旅程,展示了我们如何实现最终目标-等效功能。 实现的细节就是细节。 这些图片来自实际的脚本,该脚本太大了,无法在此处复制,但是如果您要下载并使用它,可以在我的网站上找到它。
辅助功能不是功能
在我的想象中,没有并发症。
- 凯莉·米洛
可访问性设计就像盖房子的基础一样—从一开始就很容易,但是之后很难破解。
显然,最好的方法是从项目一开始就考虑可访问性-认识到可访问性是设计考虑因素,而不是功能。 确实, 乔·克拉克(Joe Clark)对Basecamp的可访问性的评估指出,如果将可访问性视为一项功能,则可能会忽略它。 “大多数开发人员无论如何都会把它遗忘;大多数开发人员不知道关于可访问性的第一件事,甚至不知道它很重要。” 可以肯定的是,这是令人怀疑的,但这是事实。
牢记这一点,在此我想给您举例说明一些很酷和鼓舞人心的事,这些事确实是该领域最佳实践的典范。 它不是新的(它已经存在一年多了,由Derek Featherstone在Web Essentials 2005上提出并提出),但是其纯粹的优雅和简单性仍然让我大吃一惊: 它是语义,可访问的填字游戏 。
我们不可能像德里克一样有才华! 但是,从日常实践的角度来看,我希望我已经开始证明与设备无关的脚本确实不是那么困难或复杂。 它可能与我们过去的工作方式有所不同,但真正需要做的只是一点点额外的思考。
From: https://www.sitepoint.com/accessible-javascript/
你可能感兴趣的:(可访问的JavaScript:鼠标之外)
美易官方:盘前道指期货涨0.5%,游戏驿站跌逾15%
美股投资
财经 人工智能 大数据 新浪微博 微信 微信公众平台 百度 金融
在股市开盘前的交易时段,道指期货上涨了0.5%,而游戏驿站(GameStop)的股价却出现了大幅下跌,跌幅超过15%。这一市场动态引发了投资者的广泛关注,也反映了当前股市的复杂性和不确定性。美股股指期货周三盘前走强,交易员为季度末的再平衡做准备。本周因假期而缩短,美国将公布关键通胀数据。道指期货涨0.5%,标普500指数期货涨0.6%,纳指期货涨0.5%。德国DAX指数涨0.4%,英国富时100指
亲亲往这里来
神道仙灵
图片发自App…哈…哈……上次……失误…失误……此…次……哈…哈…哈……我不会……哪么……大舌头……哪么……呆笨……直…白…了…!…亲们……看见…我口中……喝的…啥了么……呵…呵…呵……看见…我手上……又…拿的……啥了…么……哈…哈…哈……哈我的小宝贝
别人能伤害你,是你允许的。
1125198e6b7d
不要对别人抱有太大期望,保护自己的最佳方式,就是从不高估自己在别人心中的份量。能伤害你的从来不是别人的无情,而是你心存幻想的坚持。及时止损,不盼望就不会失望。相识很久的关系,明明内心很不舒服,却还要装作若无其事的样子,强撑着去面对。一次又一次为了迎合而迎合,自我qipian,精神内耗。对于那些不能带给你任何积极能量的人,我们真正要做的就是及时止损。伤害你的人从来没想过帮助你成长,真正让你成长的是你
2023-02-16
执剑饮烈酒
1、开心点,反正谁也别想活着离开这个世界。——朱德庸2、我一直以为爱的反义词是不爱,直到现在我才明白,爱的反义词是遗忘。——《寻梦环游记》3、人生的最高境界是佛为心,道为骨,儒为表,大度看世界。技在手,能在身,思在脑,从容过生活。——南怀瑾4、如果一个民族沦落到,只剩下把升官发财当成最终目标和追求的时候,那么这个民族就危险了,一旦金钱和权利成了唯一的信仰,那将是悲哀的。——鲁迅5、人和人如果不在一
为什么wal会 提升数据库性能
浩澜大大
数据库
由于对于一个数据库内会存在很多张表,那么当数据库更新表数据时(1)直接写入磁盘实际写入的位置,会根据表的不同对应到不同的磁盘位置,在写入数据的时候,就会不停的寻找磁盘地址,找到地址后再去写入,对于机械硬盘来说,无规律的寻址是非常耗时的,对应SSD来说虽然性能提升很多,但是也会消耗时间;(2)先写入日志,在写入磁盘(WAL)WAL的过程,由于总是按照在文件末尾追加,只要找到文件写入位置,写入修改后,
【Python】一文详细介绍 py格式 文件
高斯小哥
Python基础【高质量合集】 python 新手入门 学习
【Python】一文详细介绍py格式文件个人主页:高斯小哥高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程希望得到您的订阅和支持~创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)文章目录一、py格式文件简介二、如何创建和编辑py格式文件三、如何运行py
《昼颜》里的日本女人:相遇要万种风情,分手要残忍绝情
迷影咖啡
作者:迷之菌子神奇菇迷影咖啡:一本正经做烘焙,胡说八道聊电影漫天萤火虫消散之时良宵就将过去,人们也说含苞待放的花蕾总会开了又谢,因紧紧相拥而面红耳赤的躯体,便是我们经历过这热爱的证明。夫妻关系介绍《昼颜》是2014年电视剧《昼颜:工作日下午三点的恋人们》的续集,故事发在电视剧情节结束的三年后,讲述了已经恢复独身的纱和偶然与曾经的出轨对象北野重逢后再次陷入感情漩涡的故事。《昼颜》制作灵感源自利佳子在
迎接2019
唯有杜康1994
告别2018这一年是机遇与挑战,痛苦与喜悦,失去与收获的一年一月:收获了第一份爱情,开始真正想去了解一个人三月:对工作有了更深入的认识,靠自己的力量完成晋升五月:搬家,住进了自己理想的公寓,一间属于自己的屋子。满地的书六月:外调广州,升经理,有了自己的第一个团队。七月:怀着自我否定,第一次完成了部门任务八月:第一个员工流失,痛哭不已明白无不散之筵席九月:员工陆续离开,经济是一切的根本。十月:陪员工
亲子日记之祝姑姥姥生日快乐(282)
冰心雨露_d504
2021年7月18日,周日,晴周日上班的不上班,上学的不上学,全家都属于休息状态,洗衣做饭是上午的主要任务,中午休息一会儿,下午比较晚了出去给梦怡买了二年级上册的口算题卡,然后去参加姑姑的生日聚餐,本来姑姑应该是周一生日,因为周一都要上班,就提前到周日过了,说是过生日其实就是想借此机会一家人聚聚,毕竟平常都忙,没有时间聚在一起,梦怡还给姑姥姥做了生日贺卡,虽然长相一般,重在心意。生日快乐
100天30本书读书计划(2018-06-11)DAY 62
一个姜姜
【书名】当我谈跑步时,我谈些什么【作者】村上春树【读书页数】51--128/187【读书时间】2018年6月11日【精彩句子】01肌肉难长,易消。赘肉易长,难消。P5502肌肉也同有血有肉的动物一般无二,它也愿意过更舒服的日子,不继续给它负荷,它便会心安理得地将记忆出去。想再度输入的话,必须得从头开始,将同样的模式重复一遍。P7703不管怎样,反正得坚持跑步。每天跑步对我来说好比生命线,不能说忙就
植物小记
番茄秧子
小时候,我养过一院子的花。今年,我重新开始从头开始养一点儿植物。别人说那也只是别人说临到快过年,我逛了一趟花市,买了两棵水仙花。路过另外一个卖水仙的摊位,霸气的卖花小妹瞧了一眼我捧着的那两棵弱小,说了一句:“你那个水仙不行,都不会开花的。”以我的脾气,这当然不能相信啊。结果,带回家好几天没动静。某一天早晨起来,两棵水仙悄不吭声全开了,然后香了屋子好多天。水仙三月,我在花市扛了一盆栀子花,花店老板见
大学播音主持都学什么内容?播音主持专业学什么?
配音新手圈
有些喜欢播音主持并且犹豫要不要报考这个大学专业的小伙伴们就会想要了解大学播音主持都学什么内容吧,毕竟如果不够了解就直接选择这个专业真的等选择完进去学习以后才知道这个专业并不是自己想要学习的东西那就来不及了。下面是小编为大家整理出来的一些播音主持专业学习的内容,请往下看吧。大学播音主持专业主要学习的课程有:播音发声、播音创作基础、广播播音主持、电视播音主持、文艺作品演播学概论、新闻学概论、新闻采编、
Android和IOS应用开发-Flutter应用让屏幕在 app 运行期间保持常亮的方法
江上清风山间明月
Flutter android ios flutter KeepAlive 屏幕常亮 wakelock 熄屏
文章目录Flutter应用让屏幕在app运行期间保持常亮的方法方法一:使用系统插件方法二:使用Widgets注意事项Flutter应用让屏幕在app运行期间保持常亮的方法在Flutter开发中,可以使用以下两种方法让屏幕在app运行期间保持常亮:方法一:使用系统插件Flutter社区中已经有很多相关插件可供使用,比如wakelock:https://pub.dev/packages/wakeloc
微信小程序监听用户经纬度变化
某公司摸鱼前端
微信小程序 小程序
一些打卡App需要根据用户的位置来完成打卡那么就需要监听用户位置变化情况:示例://在某个生命周期函数中,如onLoad中onLoad:function(options){//开始监听位置变化wx.startLocationUpdate({success:function(){console.log('开始更新位置');},fail:function(){console.log('开始更新位置失败
2019-04-08早
梦雅的简动力
在上瑜伽课前10分钟的调息中,你的眼睛为什么总是想睁开?(焦虑)。你的眉头为什么总是紧锁?(压力)。练习体式时你为什么总是去看别人?(攀比)保持体式时你为什么总是烦躁?(性急)。保持长久而规律的练习,以上这些,终归离你远去。瑜伽,首先,不是帮你得到,而是教你放下。图片发自App时间,一时间无法跳离这个特殊的词汇毅力,坚持,真诚,需要时间来见证真相,现实,伪装,时间自然会揭秘珍惜它又害怕它可它丝毫不
3/31总结
静心第一
今日总结:1.上午体验课以及反馈2.p1专注力上课3.情绪精品营上课4.燕子营队辅营以及前台值班5.活动室带孩子接待带到访今日反思:1.合理安排体力2.对于准客户记得跟进3.不要放过每一次成交的机会(这个精品营转发有点失败,后期需调整)今日感受:1.为了效果,后期课程一定想方设法布置家庭,给予一个好的支持系统2.上到下午的课程感觉特别特别的累3.晚上在做辅营一个孩子大声叫喊,后来单独出去沟通,其实
极狐GitLab 论坛 2.0 全新上线,可以在论坛上查找与 GitLab 相关的问题了~
极小狐
gitlab 极狐GitLab devops GitLab ci/cd devsecops SCM
安装出现依赖错误?版本升级搞不定?遇到422、500就懵逼了?不知道某个功能是免费or付费?……使用GitLab这种全球顶级的DevOps平台进行软件研发时,总会遇到一些困惑,想跟专业的技术人员快速交流以便获得答案,同时又想把这些问题沉淀下来以帮助他人?有这种赠人玫瑰,手有余香的解决方案吗?答案肯定有:论坛!!!论坛——一个各路大神聚集的地方,一个可以解惑答疑问道的地方。解惑:搜索与自己问题相同或
数据结构奇妙旅程之深入解析快速排序
山间漫步人生路
数据结构 排序算法 算法
快速排序(QuickSort)是一种高效的排序算法,它使用了分治法的策略来将一个数组排序。其基本思想是选择一个基准元素,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比基准元素小,另一部分的所有数据都比基准元素大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。工作原理选择基准:从待排序的序列中选一个元素作为基准(pivo
被隔离的日子(五)@三七会写作营
三七会萍海临风
从隔离的初期,我们三人都不适应,彼此说话都还火药味十足。后随着时间的推移,到现在,我们仨人能够心平气和,幽默地对待彼此。看来,时间可真是个好东西,不仅能见证一个人的心性,还能看清自己的需求、他人的本质。今天晚上,孩子跑到厨房,告诉我她给人捐款了。我纳闷,不是给河南捐过款了么。当时,我还落后于她捐的呢。这次又捐给谁?看到我一脸狐疑,孩子说,还记得初四给她补课的那个男老师么?当让记得,当时,就因为是男
教育微创新的意蕴
知北老师
我是1992年参加工作的,一毕业就被分配到一所全县最偏僻落后的农村学校——付窝中学,12年后被调往一所已经连续十年全县倒数第一,也是很偏僻落后的农村学校——北宋镇第三中学。三年后到了北宋镇第一中学工作,这所学校教学质量也是连续几年落后了。2014年我到了北京市育英学校,这所学校是京城名校。2016年7月,我被育英学校派往原密云区第七中学工作,这是一所城乡接合部薄弱学校。学校现名为北京市育英学校密云
我喝醉了,但是与你无关
Z先生的日记本
2019年04月10号晚上我和一个朋友喝酒了,彻彻底底的喝醉了,喝到短片,事后我问L,我说我喝醉了之后,都发生了什么,L没有告诉我详情,但是跟我说了大致,他说我跟他一直聊天,说自己小的时候的事,说自己爸妈的事,说自己现在过得很苦可能,确实是喝醉了酒,才会毫无防备的跟其他人说这些吧。L还说感觉我过得很苦,很心疼。醉了酒之后还哭了,想想还真是丢人一年前,在宿舍也有一瓶红酒,那是舍友出去拉赞助时候,友商
android 自定义曲线图,Android自定义View——贝赛尔曲线
weixin_39767513
android 自定义曲线图
个人博客:haichenyi.com。感谢关注本文针对有一定自定义View的童鞋,最好对贝赛尔曲线有辣么一丢丢了解,不了解也没关系。花5分钟看一下GcsSloop的安卓自定义View进阶-Path之贝塞尔曲线。本文的最终效果图:最终效果图.gif思路首先他是一个只有上半部分的正弦形状的水波纹,很规则。其次,他这个正弦图左右在移动。然后,就是它这个自定义View,上下也在移动,是慢慢增加的最后,优化
Flink中的SQL Client和SQL Gateway
BigDataMLApplication
flink flink sql gateway
Flink中的SQLClient和SQLGateway对比目录定义基本原理适用场景主要区别常用运维命令示例官方链接正文1.定义SQLClient:FlinkSQLClient是一种用于提交和执行FlinkSQL语句的命令行界面或图形界面工具。SQLGateway:FlinkSQLGateway是一个独立的服务,它允许客户端通过RESTfulAPI将SQL查询提交到Flink集群。2.基本原理SQL
2022年河南省高等职业教育技能大赛云计算赛项竞赛赛卷(样卷)
忘川_ydy
云计算 云计算 openstack kubernetes docker python k8s ansible
#需要资源(软件包及镜像)或有问题的,可私博主!!!#需要资源(软件包及镜像)或有问题的,可私博主!!!#需要资源(软件包及镜像)或有问题的,可私博主!!!第一部分:私有云任务1私有云服务搭建(10分)使用提供的用户名密码,登录竞赛用的云计算平台,按要求自行使用镜像创建两台云主机,创建完云主机后确保网络正常通信,然后按要求配置服务器。根据提供安装脚本框架,补充脚本完成OpenStack平台的安装搭
浪潮 M5系列服务器IPMI无法监控存储RAID卡问题.
Songxwn
硬件服务器 服务器 运维
简介浪潮的M5代服务器,可能有WebBMC无法查看存储RAID/SAS卡状态的情况,可以通过以下方式修改。修改完成后重启BMC即可生效。ESXiIPMITools使用:https://songxwn.com/ESXi8_IPMI/(Linux也可以直接使用)Linux/ESXiIPMITool下载:https://songxwn.com/file/ipmitoolWindows下载:https:/
打印出1-100的奇数 。(C语言)
王多鱼001
C语言 c语言 算法 数据结构
代码:#includeintmain(){for(inti=1;i<101;i++){if(i%2==1){printf("%d,",i);}}return0;}
【OpenModelica】4命令行大全
Wumbuk
python 开发语言 modelica
命令行大全文章目录命令行大全一、SummaryofCommandsfortheInteractiveSessionHandler二、Runningthecompilerfromcommandline一、SummaryofCommandsfortheInteractiveSessionHandler以下是交互式会话处理器中当前可用命令的完整列表。•simulate(modelname):翻译一个名为
通俗易懂:MySQL中如何设置只读实例并确保数据一致性?
大龄下岗程序员
mysql java mysql spring
在MySQL中设置只读实例主要应用于构建高可用性和扩展性的数据库环境,通常是为了分担读取负载或者用于备份和灾难恢复。以下是创建MySQL只读实例并确保数据一致性的基本步骤:1.创建并配置只读实例-主从复制设置-首先,你需要有一个主数据库实例(Master)负责接收所有的写操作。-创建一个或多个从数据库实例(Slave),并将它们配置为主数据库的复制品。这通常通过设置主从复制(Replication
拼多多纸巾推荐:品质与性价比的完美结合
氧惠帮朋友一起省
拼多多纸巾推荐拼多多纸巾返现怎么做在我们的日常生活中,纸巾已经成为不可或缺的用品。无论是在家庭、办公室还是旅途中,纸巾都是我们随时随地需要的物品。随着电商平台的兴起,越来越多的人选择在网上购买纸巾。其中,拼多多作为国内知名的电商平台之一,以其独特的社交电商模式和实惠的价格吸引了大量用户。今天,我们就来探讨如何在拼多多上选择品质优良、性价比高的纸巾,以及如何通过一些小技巧来获取更多的优惠。一、品质与
5月8日盘前提示:维持短期可以操作到下周二左右的判断,重个股轻指数
九命_猫妖
大盘:消息面。取消境外投资者额度限制,这个长线利好股市,短期影响不大,因为3000亿额度只用了1/3。额度本来就够用。走势看,昨天缩量横盘,走的还算中规中矩,近期一直弱势的次新股走势较强,前期强势股京威股份、光大嘉宝等跌停,由此判断市场还是存量博弈的市场,震荡是市场的主基调。维持短期可以操作到下周二左右的判断。下周后半段震荡回调的概率较高。思路:短期重个股轻指数行业和个股:物联网行业有利好,关注下
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite
iwindyforest
vmware mac os 10.10 workstation player
最近尝试了下VMware下安装MacOS 系统,
安装过程中发现网上可供参考的文章都是VMware Workstation 10以下, MacOS X 10.9以下的文章,
只能提供大概的思路, 但是实际安装起来由于版本问题, 走了不少弯路, 所以我尝试写以下总结, 希望能给有兴趣安装OSX的人提供一点帮助。
写在前面的话:
其实安装好后发现, 由于我的th
关于《基于模型驱动的B/S在线开发平台》源代码开源的疑虑?
deathwknight
JavaScript java 框架
本人从学习Java开发到现在已有10年整,从一个要自学 java买成javascript的小菜鸟,成长为只会java和javascript语言的老菜鸟(个人邮箱:deathwknight@163.com)
一路走来,跌跌撞撞。用自己的三年多业余时间,瞎搞一个小东西(基于模型驱动的B/S在线开发平台,非MVC框架、非代码生成)。希望与大家一起分享,同时有许些疑虑,希望有人可以交流下
平台
如何把maven项目转成web项目
Kai_Ge
maven MyEclipse
创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web Module的Version为2.5.(3.0为Java7的,Tomcat6不支持). 如果提示错误,可能需要在Java Compiler设置Compiler compl
主管???
Array_06
工作
转载:http://www.blogjava.net/fastzch/archive/2010/11/25/339054.html
很久以前跟同事参加的培训,同事整理得很详细,必须得转!
前段时间,公司有组织中高阶主管及其培养干部进行了为期三天的管理训练培训。三天的课程下来,虽然内容较多,因对老师三天来的课程内容深有感触,故借着整理学习心得的机会,将三天来的培训课程做了一个
python内置函数大全
2002wmj
python
最近一直在看python的document,打算在基础方面重点看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception这四个方面,其实在看的时候发现整个《The Python Standard Library》章节都是很不错的,其中描述了很多不错的主题。先把Build-in Fu
JSP页面通过JQUERY合并行
357029540
JavaScript jquery
在写程序的过程中我们难免会遇到在页面上合并单元行的情况,如图所示
如果对于会的同学可能很简单,但是对没有思路的同学来说还是比较麻烦的,提供一下用JQUERY实现的参考代码
function mergeCell(){
var trs = $("#table tr");
&nb
Java基础
冰天百华
java基础
学习函数式编程
package base;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
// Integer a = 4;
// Double aa = (double)a / 100000;
// Decimal
unix时间戳相互转换
adminjun
转换 unix 时间戳
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)
getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 62135
作为一个合格程序员该做的事
aijuans
程序员
作为一个合格程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多
2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重
由html5视频播放引发的总结
ayaoxinchao
html5 视频 video
前言
项目中存在视频播放的功能,前期设计是以flash播放器播放视频的。但是现在由于需要兼容苹果的设备,必须采用html5的方式来播放视频。我就出于兴趣对html5播放视频做了简单的了解,不了解不知道,水真是很深。本文所记录的知识一些浅尝辄止的知识,说起来很惭愧。
视频结构
本该直接介绍html5的<video>的,但鉴于本人对视频
解决httpclient访问自签名https报javax.net.ssl.SSLHandshakeException: sun.security.validat
bewithme
httpclient
如果你构建了一个https协议的站点,而此站点的安全证书并不是合法的第三方证书颁发机构所签发,那么你用httpclient去访问此站点会报如下错误
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu
Jedis连接池的入门级使用
bijian1013
redis redis数据库 jedis
Jedis连接池操作步骤如下:
a.获取Jedis实例需要从JedisPool中获取;
b.用完Jedis实例需要返还给JedisPool;
c.如果Jedis在使用过程中出错,则也需要还给JedisPool;
packag
变与不变
bingyingao
不变 变 亲情永恒
变与不变
周末骑车转到了五年前租住的小区,曾经最爱吃的西北面馆、江西水饺、手工拉面早已不在,
各种店铺都换了好几茬,这些是变的。
三年前还很流行的一款手机在今天看起来已经落后的不像样子。
三年前还运行的好好的一家公司,今天也已经不复存在。
一座座高楼拔地而起,
【Scala十】Scala核心四:集合框架之List
bit1129
scala
Spark的RDD作为一个分布式不可变的数据集合,它提供的转换操作,很多是借鉴于Scala的集合框架提供的一些函数,因此,有必要对Scala的集合进行详细的了解
1. 泛型集合都是协变的,对于List而言,如果B是A的子类,那么List[B]也是List[A]的子类,即可以把List[B]的实例赋值给List[A]变量
2. 给变量赋值(注意val关键字,a,b
Nested Functions in C
bookjovi
c closure
Nested Functions 又称closure,属于functional language中的概念,一直以为C中是不支持closure的,现在看来我错了,不过C标准中是不支持的,而GCC支持。
既然GCC支持了closure,那么 lexical scoping自然也支持了,同时在C中label也是可以在nested functions中自由跳转的
Java-Collections Framework学习与总结-WeakHashMap
BrokenDreams
Collections
总结这个类之前,首先看一下Java引用的相关知识。Java的引用分为四种:强引用、软引用、弱引用和虚引用。
强引用:就是常见的代码中的引用,如Object o = new Object();存在强引用的对象不会被垃圾收集
读《研磨设计模式》-代码笔记-解释器模式-Interpret
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 解释器(Interpreter)模式的意图是可以按照自己定义的组合规则集合来组合可执行对象
*
* 代码示例实现XML里面1.读取单个元素的值 2.读取单个属性的值
* 多
After Effects操作&快捷键
cherishLC
After Effects
1、快捷键官方文档
中文版:https://helpx.adobe.com/cn/after-effects/using/keyboard-shortcuts-reference.html
英文版:https://helpx.adobe.com/after-effects/using/keyboard-shortcuts-reference.html
2、常用快捷键
Maven 常用命令
crabdave
maven
Maven 常用命令
mvn archetype:generate
mvn install
mvn clean
mvn clean complie
mvn clean test
mvn clean install
mvn clean package
mvn test
mvn package
mvn site
mvn dependency:res
shell bad substitution
daizj
shell 脚本
#!/bin/sh
/data/script/common/run_cmd.exp 192.168.13.168 "impala-shell -islave4 -q 'insert OVERWRITE table imeis.${tableName} select ${selectFields}, ds, fnv_hash(concat(cast(ds as string), im
Java SE 第二讲(原生数据类型 Primitive Data Type)
dcj3sjt126com
java
Java SE 第二讲:
1. Windows: notepad, editplus, ultraedit, gvim
Linux: vi, vim, gedit
2. Java 中的数据类型分为两大类:
1)原生数据类型 (Primitive Data Type)
2)引用类型(对象类型) (R
CGridView中实现批量删除
dcj3sjt126com
PHP yii
1,CGridView中的columns添加
array(
'selectableRows' => 2,
'footer' => '<button type="button" onclick="GetCheckbox();" style=&
Java中泛型的各种使用
dyy_gusi
java 泛型
Java中的泛型的使用:1.普通的泛型使用
在使用类的时候后面的<>中的类型就是我们确定的类型。
public class MyClass1<T> {//此处定义的泛型是T
private T var;
public T getVar() {
return var;
}
public void setVa
Web开发技术十年发展历程
gcq511120594
Web 浏览器 数据挖掘
回顾web开发技术这十年发展历程:
Ajax
03年的时候我上六年级,那时候网吧刚在小县城的角落萌生。传奇,大话西游第一代网游一时风靡。我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一个小时我一直在,注,册,账,号。
彼时网吧用的512k的带宽,注册的时候,填了一堆信息,提交,页面跳转,嘣,”您填写的信息有误,请重填”。然后跳转回注册页面,以此循环。我现在时常想,如果当时a
openSession()与getCurrentSession()区别:
hetongfei
java DAO Hibernate
来自 http://blog.csdn.net/dy511/article/details/6166134
1.getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
2. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭。
这里getCurrentSession本地事务(本地
第一章 安装Nginx+Lua开发环境
jinnianshilongnian
nginx lua openresty
首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒
HSQLDB In-Process方式访问内存数据库
liyonghui160com
HSQLDB一大特色就是能够在内存中建立数据库,当然它也能将这些内存数据库保存到文件中以便实现真正的持久化。
先睹为快!
下面是一个In-Process方式访问内存数据库的代码示例:
下面代码需要引入hsqldb.jar包 (hsqldb-2.2.8)
import java.s
Java线程的5个使用技巧
pda158
java 数据结构
Java线程有哪些不太为人所知的技巧与用法? 萝卜白菜各有所爱。像我就喜欢Java。学无止境,这也是我喜欢它的一个原因。日常
工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法。比如说线程。没错,就是线程。或者确切说是Thread这个类。当我们在构建高可扩展性系统的时候,通常会面临各种各样的并发编程的问题,不过我们现在所要讲的可能会略有不同。
开发资源大整合:编程语言篇——JavaScript(1)
shoothao
JavaScript
概述:本系列的资源整合来自于github中各个领域的大牛,来收藏你感兴趣的东西吧。
程序包管理器
管理javascript库并提供对这些库的快速使用与打包的服务。
Bower - 用于web的程序包管理。
component - 用于客户端的程序包管理,构建更好的web应用程序。
spm - 全新的静态的文件包管
避免使用终结函数
vahoa.ma
java jvm C++
终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。
我自己总结了一下这一条的综合性结论是这样的:
1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方