Hpyer 的未知空间

POTCreator – Gettext POT文件生成器

Posted by Hpyer on 星期三, 一月 18th, 2012

概要 / Summary 这是一个用于生成 GETTEXT 的 POT 文件的类,然后你就可以使用 Poedit 进行翻译啦。 – This class can help you to create a POT file for GETTEXT, Then you can translate it by Poedit. 网上找了很久,都没有找到这样的工具,于是乎自己写了一个,大家使用过程中有问题,可以在此回复。 – Please report bug here, thank you! 主页 / Home:http://hpyer.cn/codes/potcreator 用法 / Usage <?php// 包含类库 – Include the classinclude(‘POTCreator.php’); // 创建对象 – Create object$obj = [...]

continue reading

ECShop插件 – 会员签到送积分

Posted by Hpyer on 星期四, 十一月 10th, 2011

如何留住用户,提高用户的回头率,一直是各类网站的重要关注的问题,尤其是商城类网站。ECShop提供基本的会员功能,可以方便的注册、购买、收藏,但是却没有足够留住老用户的功能。或许您会说其本身有用户推广分成的功能,但是又有多少商家会开通呢?本文介绍的就是这么一款具有该方面功效的ECShop插件——会员签到送积分。 效果图: 注:该图只是效果图,需买家提供与您网站切合的样式、图片等。 该插件具有如下功能: 支持每天赠送相同积分 支持递增积分赠送(即第二天赠送的积分比第一天多) 支持后台设置 支持任意位置添加签到按钮 现在购买本插件,您还可以得到: 帮助完成插件安装(需提供临时的FTP及后台的账号、密码),并调试完成 永久享受本插件的后续升级、修复服务(如:淘宝数据包升级而引起的功能失效等) 插件价格 100.00 RMB 注:此价格只包含前文所述的功能及服务,若需额外增加的朋友请联系站长协商。 购买方式 本站支持支付宝、财付通的担保交易,需要的朋友请即刻联系站长,以便提供购买链接给您。

continue reading

ECShop插件 – 批量上传之淘宝数据包导入(支持图片导入)

Posted by Hpyer on 星期四, 十一月 10th, 2011

大家都知道ECShop是支持淘宝数据包上传的,网上也有很多“详细”的教程。但是相信很多用过改功能的朋友,都会发现其没有那么方便,不是图片无法上传,就是数据读取正确,从而导致上传失败。不免也让很多用户觉得该功能真是个鸡肋。 本插件可以有效修复上述问题,并完美支持最新的5系列的淘宝助理实现以下几点: 插件特点: 支持最新5系列及4系列淘宝助理 支持商品属性导入,如:尺码、颜色等(新功能) 数据包中图片导入(与数据包文件同名目录下的.tbi文件) 准确读取数据包中的每一条数据,并保证无乱码 自动按商店设置中的“市场价格比例”填写市场价格(可选,默认与本店售价相同) 导入数据时,支持品牌选择(可选,同一次上传的数据品牌相同,但在确认页自行输入的除外) 完整后续操作图文手册及相关使用工具 现在购买本插件,您还可以得到: 帮助完成插件安装(需提供临时的FTP及后台的账号、密码),并调试完成 永久享受本插件的后续升级、修复服务(如:淘宝数据包升级而引起的功能失效等) 插件价格 200.00 RMB 注:此价格只包含前文所述的功能及服务,若需额外增加的朋友请联系站长协商。 购买方式 本站支持支付宝、财付通的担保交易,需要的朋友请即刻联系站长,以便提供购买链接给您。

continue reading

Javascript 中 click 和 dblclick 事件冲突问题的解决办法

Posted by Hpyer on 2008-09-27 - 6,284 Views - No Comment

  一个DOM元素,如:div,既绑定了 click 事件,又绑定了 dblclick 事件,这两个事件分别要做独立的事情。事件处理上没有冲突,都可以各自完成各自的操作。双击的时候虽然是执行了 dblclick 事件,但是在这之前,也执行了 click 事件,那么,如何来禁止或者说屏蔽这次多余的 click 事件呢?本文将提供给您一个比较好的解决办法。

情况分析
  首先,来了解一下点击事件发生的先后顺序:

  • 单击:mousedown, mouseup, click
  • 双击:mousedown, mouseup, click, mousedown, mouseup, click, dblclick

  由此看来,dblclick 事件发生之前,实际上发生了两次 click 事件。其中,第一次的 click 是会被屏蔽掉,但是第二次则不会,所以就出现在双击的时候,也触发 click 事件。

解决办法
  知道了原因,接下来自然就是想办法把这次 click 给屏蔽掉,但是由于各浏览器均未提供直接去停止事件的方法,所以值得改变思路。
  由于我们只需要屏蔽一次 click 事件即可,由此联想到,可以利用 setTimeout() 方法来延时完成 click 事件的处理,在需要停止 click 的时候利用 clearTimeout() 方法停止这一事件的处理。这样,就可以比较容易的写出如下的 javascript 代码:

  1. var timer = null;
  2.  
  3. function do_click(event) {
  4.     clearTimeout(timer); // 这里加一句是为了兼容 Gecko 的浏览器
  5.     // if (event.detail == 2) return ; // 同上句的作用
  6.  
  7.     timer = setTimeout(function() {
  8.         // click 事件的处理
  9.     }, 300);
  10. }
  11.  
  12. function do_dblclick(event) {
  13.     clearTimeout(timer);
  14.     // dblclick 事件的处理
  15. }

测试代码
需要 jQuery 类库,你可以从 jquery.com 获取到最新版本

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>Test</title>
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript">
  7. var Test = {
  8.     times: 0,
  9.     timer: null,
  10.     logs: [],
  11.     first: null,
  12.     last: null,
  13.     do_click: function() {
  14.         var self = Test;
  15.         self.start();
  16.         clearTimeout(self.timer);
  17.         self.times++;
  18.         self.timer = setTimeout(function() {
  19.             self.logs.push('click');
  20.             self.echo();
  21.         }, 300);
  22.     },
  23.     do_dblclick: function() {
  24.         var self = Test;
  25.         clearTimeout(self.timer);
  26.         self.logs.push('dblclick');
  27.         self.echo();
  28.     },
  29.     start: function() {
  30.         if (this.first == null) {
  31.             this.first = new Date().getTime();
  32.         }
  33.     },
  34.     end: function() {
  35.         if (this.last == null) {
  36.             this.last = new Date().getTime();
  37.         }
  38.     },
  39.     get_time: function() {
  40.         return (this.last - this.first) || 0;
  41.     },
  42.     echo: function() {
  43.         var self = Test;
  44.         self.end();
  45.         var log = 'No.' + self.times + '; Use time: ' + self.get_time() + 'ms; Event: ' + self.logs.join(', ') + ';<br />\n';
  46.         $('#log').prepend(log);
  47.         self.first = null;
  48.         self.last = null;
  49.         self.logs = [];
  50.     },
  51.     init: function() {
  52.         $(document).ready(function() {
  53.             $('div').click(Test.do_click).dblclick(Test.do_dblclick);
  54.         });
  55.     }
  56. };
  57. Test.init();
  58. </script>
  59. </head>
  60. <body>
  61. <div style="width:200px; height:50px; border:1px solid #999;">Click / DblClick Me!</div>
  62. Log:<br />
  63. <textarea id="log" rows="20" cols="50"></textarea>
  64. </body>
  65. </html>

问题总结
  从测试结果来看,如果前后两次点击的时间在 300ms 左右的时候,还是很容易出现 click 和 dblclick 事件被“同时”调用的情况,而如果间隔的时间更短或更长,则只会有 click 或 dblclick 事件。
  所以,应该说这个方法已经在很大程度上,避免了 click 和 dblclick 事件的“同时”存在问题。当然,它还没有达到完全解决的程度。

需要注意的地方

  • windows 的控制面板里是可以调鼠标的双击速度的(Linux 等系统下能不能调,俺就不清楚了),这点对于程序还是有一定影响,大家可以自己调节下试试看~
  • 经过测试,延时 300ms 是一个比较理想的事件,既考虑到对鼠标操作并不十分顺利的朋友,也兼顾 click 事件的响应速度
  • 以上代码,只在 IE6、FF3、Chrome 中测试过,并未出现问题

Posted in: Web 技术.

Leave a Reply

About | Contact | Guestbook | Archives | Sitemap

如果您觉得本站的文章有帮助,并且条件允许的话,希望您能慷慨捐赠,以支持本站更好的发展。非常感谢!