表单中readonly的input等标签,禁止光标进入(focus)的几种方式

在做移动端页面,表单内的部分元素如果设置了readonly=”readonly”,CHROME模拟移动端是看不出问题的。而手机上虽然表单元素不能编辑内容,但是会出现闪动的光标以及页面底部有一条系统自带的控制bar。这样的体验很差,于是我总结了几个方案。

在做移动端页面,需要在订单页面中显示表单数据,由于UI统一,所以就依旧采用form的结构来写结构,只读数据的标签自然要加readonly=”readonly”,以为这样就行了,CHROME模拟移动端是看不出问题的。手机上一看,虽然表单元素不能编辑内容,但是会出现闪动的光标以及页面底部有一条系统自带的控制bar。

表单readonly元素依然有光标
表单readonly元素依然有光标,底部还有BAR,感觉不好

这种情况对我来说并不好。于是网上找了一些解决方案,现在总结一下:

方案一(JS):

<input type="text" value="test" onfocus="this.blur()" readonly="readonly">

这个很好理解就是进入的时候自动跳出。但是缺点是一方面js处理没有css好,二是如果需要在该元素上绑定其他事件,其他人开发不留意可能会造成事件覆盖。

方案二(CSS):

[readonly="readonly"] {
  user-select: none;
}

这是个新的实验性属性,具体说明及兼容性可参考user-select MDN
用起来感觉很好,但是同样有两个问题:一,非标准属性(请尽量不要在生产环境中使用它!);二,如果用户想要复制该表单内容就不行了,这个问题个人感觉很严重!

方案三(CSS):

[readonly="readonly"] {
  pointer-events: none;
}

这个是我感觉比较适合我的,因此最后我采纳了该方案,当然也是有弊端的,绑定在只读表单元素的所有事件将无法生效。除此之外都表现完美,就我目前需求来看,也不需要什么事件。因此采用了~

当然,如果你也遇到相似的问题,可以根据情况选择对应的方案,当然,如果你也有更好的方法也欢迎留言~

PostCSS学习指南(二)

关于我最近学习PostCSS的一些相关心得和总结,主要介绍项目中可能用到的一些插件比如autoprefixer,postcss-partial-import,postcss-advanced-variables,cssnano,postcss-px2rem,precss等等

(推荐访问github上面的Markdown排版的介绍PostCSS学习指南(二))

继上一次PostCSS学习指南(一)后,渐渐开始在项目中应用。

这次决定主要讲解一些个人认为非常有帮助的PostCSS插件。

本期主要介绍以下几个插件和几个坑

  1. autoprefixer
  2. postcss-partial-import
  3. postcss-advanced-variables
  4. cssnano
  5. postcss-px2rem
  6. precss
  7. postcss-nestingpostcss-nested
  8. 坑( ఠൠఠ )ノ

autoprefixer

这个就不用多说了,必装插件之一。方便的写规范的css,它会为你提供非常完整的hack兼容方案的。当然这里需要了解一下的是,它的大部分兼容数据来源Can I Use,另外一个稍微需要了解的插件配置参数就是browsers,比如这样写:

module.exports = {
  plugins: [
    require('autoprefixer')({ browsers: 'last 2 versions' })
  ]
}

关于这个参数的详细介绍可以看看Browserslist Queries,文中说了,强烈建议将查询写入package.json(后面会告诉你为何要写在这里),而非配置postcss.config.js中autoprefixer的browsers参数。所以此处建议写法如下: 继续阅读“PostCSS学习指南(二)”

Visual Studio Code 设置同步到github的插件介绍及使用方法(Settings Sync)

最近基本上习惯了用VSCODE进行开发了.最主要的感觉就是查找JS里面函数定义和引用很方便.还有可能是装逼心理… :roll:

一开始不知道怎么备份VSCODE的配置,傻乎乎的把要用的插件抄下来,还有用户settings拷贝出来.每次换了电脑或者重装系统什么的都要重新备份.虽然来回调整的概率很低,但是突然哪天需要同步设置什么的就很麻烦了~至少我是在初期经常鼓捣这个编辑器,而且办公在家和公司是不同的设备~所以觉得还是很有必要的~

于是我今天要说的就是这个插件Settings Sync

官方都是英文的,不过还算简单,我把步骤简化一下.

1.安装插件并重启VSCODE就不用说了

安装Settings Sync
安装VSCODE Settings Sync后重新加载

2.重启后按快捷键 alt+shift+u (这里假设你第一次用)

它会弹出一个窗口对应的是github上面的创建个人gist的页面,如果未登录请先登录github.

github创建gist来存储设置
github创建gist来存储设置

保存后会生成一个key

请牢记token id,后面将会用到
请牢记token id,后面将会用到

3.切回到vscode,他会有个输入区,就是存放刚才生成的key

输入刚才生成的key
输入刚才生成的key

然后理论上他就开始对你本机的配置进行一个扫描上传了.至此上传工作完成.

接下来我们到另一台电脑上了下载配置.同样的先安装Settings Sync插件,并重新加载.

然后按快捷键alt+shift+d,就应该会弹出一个输入框,请在这里输入之前保存下来的key(GIST ID),回车后将会自动下载之前上传的配置.

那么下载完成后,你这台电脑修改了相关配置再次上传就好了.是不是感觉方便多了~

其他的说明,如果在输入gist id写错了,读取不到的情况下,大概需要重置设置,按F1,输入sync,这里有重置选项.试试看~

重置sync的gist配置信息等
重置sync的gist配置信息等

还有些其他的功能例如自动上传下载等等,不是很常用,大家可以自行看看官方文档,基本的使用方法就是这样了,我写的如果有问题或者哪里不明白的可以留言- -.

下面是官方说明

http://shanalikhan.github.io/2015/12/15/Visual-Studio-Code-Sync-Settings.html

插件地址

https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync

jQuery Trickshots来自Tutorialzine的一本关于100个高级jQuery技术书籍分享

最近看到一篇写的不错的文章,来自jQuery中的100个技巧.首先感谢作者辛苦翻译.

不过我也想找原文…于是也是辛苦了很久才找到了这篇伟大的文章出处,更难能可贵的是该站竟然有多个版本的电子书,开放免费.当然是需要注册的,我注册了一个,下载了与大家分享.

这个压缩包包含了全部html,js实例源码,还有多个版本的电子版(pdf,mobi,epub),满足了用电脑,手机或者kindle的用户简直太棒了!!!迫不及待放出分享连接了.以下是分享地址

百度网盘: 英文原版下载页面(以及鸟语版,不懂鸟语的不要下)

如果不能下载了请与发邮件

最后再次感谢伟大的

作者:Tutorialzine

来源:http://tutorialzine.com/books/jquery-trickshots/

介绍:

In this book, you will find 100 advanced jQuery techniques that we have developed over the years as JavaScript programmers and authors for Tutorialzine, presented as easy to understand tips.

尼康单反摄影优化校准相关学习

那部Nikon D5000沉睡了太久了.因为年代已久,似乎我已不爱它了.曾经有一段时间,我每次带着D5000满怀希望的外出,希望能找到令人惊喜的照片,可是多少次带回来的是失望.可是后来我觉得这部单反还是很不错的.通过重新学习和认识D5000,来提高自己摄影水平,尼康单反摄影优化校准相关学习!

那部Nikon D5000沉睡了太久了.因为年代已久,似乎我已不爱它了.曾经有一段时间,我每次带着D5000满怀希望的外出,希望能找到令人惊喜的照片,可是多少次带回来的是失望.

于是渐渐地,我的手机开始取代它了.似乎快餐令人满意.生活节奏之快,让我忘记了初心,那些快感让我一直处于自我麻痹的快乐中.

前几日,我再次习惯性的带上了我的单反,和朋友们出游,他们也带了几部单反,闲暇之余,拿来朋友的Canon 600D,试玩了一把,同样是狗头,呈像效果完全不同…我试着将参数全部设置为一致.结果依然令我惊讶,我起初开始怀疑难道是因为这部用了6年的单反,要淘汰了吗.竟有买新机的冲动,是不是该换一步D7200了呢?

后来回来,翻了翻曾经的老照片,我仔细思考了一下,我否决了起初的想法.我认为我的D5000还能再战5年!!!(虽然有些夸张,但是大部分场景还是可以应付的).我真正该做的,大概是将它好好的保养一次,然后,重新阅读一次说明书.将各个参数的理解层次提高.我相信,这样一部老机器依然能拍出好的东西的.

接下来才是重点,学习研究过程中,离不开一些好的文章资料.这里也分享出来.

尼康优化校准设置杂谈2012新版
http://photo.withqiuliang.com/nikon_picture_control/index.html

尼康曲线(影像优化校准系统)详解 + 下载
http://bbs.rayi.cn/thread-261861-1-1.html

尼康优化校准曲线下载
http://www.ooidea.com/forum.php?mod=viewthread&tid=1617

尼康D5000使用技巧指南
http://jingyan.baidu.com/article/17bd8e52f954d585ab2bb8c0.html

Nikon D5000: tips for using your digital camera
http://www.digitalcameraworld.com/2012/09/08/nikon-d5000-tips-for-using-your-digital-camera/

Nikon D5000 Demo Review Tips 15 tricks – YouTube
https://www.youtube.com/watch?v=eRd6o9MyI50

好了先就这些了有空多读读.希望自己在未来一段时间能排出更好的作品~

dota2启动报错解决办法(CAppSystemDict::…RenderDeviceMgr001)

dota2启动报错解决
CAppSystemDict::LoadSystemAndDependecies():
AppSystemDict: Error in init() of interface ‘RenderDeviceMgr001’!

好久没玩下dota2了.有几个朋友找起说耍一下.决定一起开开黑玩玩…经过几G的更新等待.准备启动游戏…却弹出了这个鬼玩意…

dota2error

CAppSystemDict::LoadSystemAndDependecies():
AppSystemDict: Error in init() of interface ‘RenderDeviceMgr001’!

这到底是个什么鬼呢?百度一下…找到的都是以下几个无效方案(也许针对其他报错可能有用,但是如果你和我一样也是RenderDeviceMgr001错误,或许你就要用别的方法了).

  1. 检查文件完整性
  2. 找到安装目录的video.txt修改什么fullscreen为0还是1的什么鬼.
  3. 修改桌面分辨率.
  4. 还有不着边际的重装驱动,重装游戏或电脑(…)

反正都没用,也不知道他们怎么弄好的…

无奈用google查了下.可能有用的方法有以下的几个

  1. 删除游戏快捷方式的启动项或者是游戏设置的启动项,比如-console之类的
  2. 游戏启动项设置为-dx11

我是用了第二个就终于进入游戏了…希望有其他人遇到此问题,并用坑爹的百度搜索能找到正确的解决方案… :roll:

参考资料

  1. How to fix RenderDeviceMgr001 error
  2. Custom mode error – RenderDeviceMgr001
  3. Reborn: Getting a diff error message than everyone else

最后说明下我的配置: win10 64bit + GTX660M + 驱动359.0

SublimeText3的css文件引用图片转base64快速方法

如果在SublimeText3的css文件引用图片里将图片快速转换为base64(Data URL)的方法,以及利用chrome开发者工具获取图片的Data Url的方法

在你做的css文件中,起初背景图都是直接引用目录的切好的图片.如下:

.icons {background-image:url(../images/icon.png);}

那么在做移动端页面的时候,有时我们需要将小图直接转换成base64格式,一般只能借助第三方工具.
这里其实用sublime text 3 的快捷键ctrl+’可以直接快速转换.
当然页面的图片建议是压缩(例如tinypng工具)后的,要不然转换出的字符将会很长.
如果能确定页面的图片都可以直接转换,你可以直接选择 url( 然后快捷键 alt+f3 ,接着按 ctrl+’ ,这样一来css的图片就全部转换好了.

另外还有一种通过chrome快速获取网页上图片的Data Url方法.如图

chrome_ImageToDataUrl
chrome_ImageToDataUrl

win7安装本地Virtual PC虚拟机配置指南(一)

由于公司最近打击盗版比较严厉,之前用的Virtual Box安装的原版盗版XP也就没法继续用了,在双哥的指引写一篇关于微软官方自家的正版Virtual PC + 正版XP的虚拟机配置和基础使用教程,仅供大家参考咯~闲话少说,直奔主题.

准备工作

  • 拥有一台WINDOW 7专业版或更高级版本的电脑(本机适用的64 bit专业版)
  • 下载Windows Virtual PC安装程序(请注意下载对应版本)
  • 下载Windows XP Mode安装程序

安装程序(步骤)

Virtual PC安装程序
Virtual PC安装程序-确认安装
Virtual PC安装程序
Virtual PC安装程序-点击同意进行安装

安装完后要求重启,那么重启电脑后安装XP MODE

Windows XP Mode
Windows XP Mode-安装解压,解压速度与电脑配置有关,约10s-1min

继续阅读“win7安装本地Virtual PC虚拟机配置指南(一)”

win7下IE9打开页面无限崩溃解决办法

莫名其妙的win7下IE9打开页面就会无限崩溃,重置ie,卸载重装,停用插件,等办法均无效.最后通过设置”使用软件呈现而不使用 GPU 呈现*”修好了,还真是奇怪呢,也不知道错误模块名称: msvcrt.dll,然后就是异常代码: 0xc0000005了这些都是什么鬼

最近有个同事的电脑,ie总是崩溃,我说我去看看吧,结果弄了一个来小时.也没搞定,重置ie,卸载重装,停用插件,等办法均无效.于是怀疑是不是压根不是系统ie文件问题了..

可是百度搜出来的哪些解决方案,可用率大家也是知道了,基本上还没我懂- -…突然想到去查看事件查看器,那里对于崩溃原因有详细的说明.于是打开管理工具事件查看器,找到Windows 日志 > 应用程序,找到ie报错的大红感叹号,,,看看咋说的.好像看不懂饿,不过有效信息是错误模块名称: msvcrt.dll,然后就是异常代码: 0xc0000005了…见图

IE crash error info
IE crash error info

那么有了这个再去查似乎好办多了…很快找到问题所在了.废话不说,说说这个方案:

Win + R > “inetcpl.cpl” > “高级” > 在设置里面找到”加速的图形” > 勾选”使用软件呈现而不使用 GPU 呈现*” > 确定 > 重启电脑

再来打开ie测试一下,据说这个方法适用于ie9和ie11.当然测试环境是win7,据说不限于32位还是64位系统或者各种版本号…

另外值得思考的是,为什么硬件渲染会出问题呢,因为是公司电脑也不方便测试,初步怀疑是不是跟显卡驱动有关.如果有兴趣的话,建议尝试卸载旧的驱动,重新安装新的最稳定的显卡驱动进行尝试.

参考来源:
IE9 crash after opening any site
Internet Explorer 9 crashes – APPCRASH, Application Name: iexplore.exe, Fault Module Name: msvcrt.dll
如果您无法卸载 Internet Explorer 9 该怎么办

页面内某元素到文档顶部的距离计算

之前写了一篇元素到网页顶部距离计算方法,其实分明有更好的方法,例如这个方法就不需要写那么复杂的循环了,这里再次总结一下。

2015年1月7日

之前写了一篇元素到网页顶部距离计算方法,其实分明有更好的方法,例如这个方法就不需要写那么复杂的循环了,这里再次总结一下。

请看下面代码,或者查看在线demo调试,看起来兼容性都是OK的。大家可以自己试试。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>the distance to top</title>
    <style type="text/css">
    div {margin:10px 20px;padding:5px;border:3px solid #aaa;position:relative;}
    .para {background-color:#ccc;}
    </style>
</head>
<body>
<div class="outer">
    <div class="outerWrap">
        <div class="header"></div>
        <div class="content">
            <div class="content-inner">
                <p class="para" id="para">
                    Hello, whidy! 这是一个获取当前元素距离网页顶部高度的计算demo.
                </p>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
para = document.getElementById('para');
var y = para.offsetTop;
var y2 = para.getBoundingClientRect().top;
while (para = para.offsetParent) {
    var oStyle = para.currentStyle? para.currentStyle : window.getComputedStyle(para, null); //currentStyle兼容IE
    var borderTopWidth = parseInt(oStyle.getPropertyValue('border-top-width')); //border-top-width实际上用于被包父级层的边框值计算,因此本demo内header的边框值对此处不影响,取而代之的是直接计入content盒子距离outerWrap的高度
    if(borderTopWidth) { //如果有边框值则加上边框
        y += para.offsetTop + borderTopWidth;
    }
    console.log(y,'offsetTop');
    console.log(y2,'getBoundingClientRect');
}
</script>
</body>
</html>

参考资料: Element.getBoundingClientRect() – Web API 接口 | MDN