20 3月 2014

jQuery动态改变图片显示大小

当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸。通过搜索,我们可以从网上找到实现此功能的jQuery代码如下。这段代码可以使图片的大小保持在一定范围内,如果图片的原始尺寸都大于max*值,则显示出来的图片宽度都相等。

原始代码:

 

01 $(document).ready(function() {
02      $('.post img').each(function() {
03      var maxWidth = 100; // 图片最大宽度
04      var maxHeight = 100;    // 图片最大高度
05      var ratio = 0;  // 缩放比例
06      var width = $(this).width();    // 图片实际宽度
07      var height = $(this).height();  // 图片实际高度
08   
09      // 检查图片是否超宽
10      if(width > maxWidth){
11          ratio = maxWidth / width;   // 计算缩放比例
12          $(this).css("width", maxWidth); // 设定实际显示宽度
13          height = height * ratio;    // 计算等比例缩放后的高度
14          $(this).css("height", height);  // 设定等比例缩放后的高度
15      }
16   
17      // 检查图片是否超高
18      if(height > maxHeight){
19          ratio = maxHeight / height; // 计算缩放比例
20          $(this).css("height", maxHeight);   // 设定实际显示高度
21          width = width * ratio;    // 计算等比例缩放后的高度
22          $(this).css("width", width * ratio);    // 设定等比例缩放后的高度
23      }
24  });
25  });

 

在我的js代码中,也采取了这种写法。然而在不同的浏览器测试效果时,发现此种写法不能适应chrome浏览器(chrome版本号为10.0.648.204),会产生图片以原有尺寸显示出来的bug。后来把$(‘.post img’).each()的代码用$(window).load()方法包装起来,就解决了chrome浏览器显示不正确的问题。那么在chrome浏览器中为什么会产生bug,并且$(document).ready和$(window).load有什么区别呢?

 

原来document ready事件是在HTML文档载入即DOM准备好就开始执行了,即使图片资源还没有加载进来。而window load事件执行的稍晚一些,它是在整个页面包括frames, objects和images都加载完成后才开始执行的。从这种区别可以分析出chrome浏览器在对于图片不采用$(window).load()方法处理时,图片载入与动态改变图片的js代码执行顺序不确定。

关于上面的代码,放到我的页面中时获取图片高度时会报错,提示没有提供width方法:

 

1 var width = $(this).width();    // 图片实际宽度
2 var height = $(this).height();  // 图片实际高度

 

故修改代码如下:

 

01 jQuery(window).load(function () {
02             jQuery("div.product_info img").each(function () {
03                 DrawImage(this, 680, 1000);
04             });
05         });
06         function DrawImage(ImgD, FitWidth, FitHeight) {
07             var image = new Image();
08             image.src = ImgD.src;
09             if (image.width > 0 && image.height > 0) {
10                 if (image.width / image.height >= FitWidth / FitHeight) {
11                     if (image.width > FitWidth) {
12                         ImgD.width = FitWidth;
13                         ImgD.height = (image.height * FitWidth) / image.width;
14                     else {
15                         ImgD.width = image.width;
16                         ImgD.height = image.height;
17                     }
18                 else {
19                     if (image.height > FitHeight) {
20                         ImgD.height = FitHeight;
21                         ImgD.width = (image.width * FitHeight) / image.height;
22                     else {
23                         ImgD.width = image.width;
24                         ImgD.height = image.height;
25                     }
26                 }
27             }
28         } 
20 3月 2014

Eclipse出现failed to create the java virtual machine

有时候重装系统之后会发现eclipse很意外的打不开,出现failed to create the java virtual machine的这种情况

 

“failed to create the java virtual machine”

对于这种情况的解决方法很简单,原因是计算机的内存不足。可以通过修改eclipse的配置文件来解决这种情况~

首先进入到eclipse的安装文件夹,打开 eclipse,ini 文件,找到–launcher.XXMaxPermSize  256M  将256M改成128M即可以正常打开eclipse了(注:一共有两处,两处都要修改!!)

 

修改后的文件如下所示:
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
-product
org.eclipse.epp.package.jee.product
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
128M
-showsplash
org.eclipse.platform
–launcher.XXMaxPermSize
128m
–launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m

 

源文件如下:
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
-product
org.eclipse.epp.package.jee.product
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
–launcher.XXMaxPermSize
256m
–launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m

19 3月 2014

安装PPTP/与WDCP完美兼容

之前论坛上也有人反应安装了WDCP以后 PPTP就不正常了。首先,VPN连不上了,原因很简单,WDCP默认的防火墙是“白名单模式”,本来防火墙默认所有端口都是打开的,但是由于wdcp防火墙默认规则的最后一条是deny all 也就是说拒绝所有,所以造成1723端口无法访问。
防火墙判断是按从上到下对规则进行检索的。
wdcp默认的规则大意就是
允许 80端口
允许 21端口
允许 8080端口
……
拒绝所有

只要没有在前面“允许”的范围内那么就是“拒绝”,很多人加入一条规则

  1. iptables -A INPUT -p tcp –dport 1723 -j ACCEPT

复制代码

结果就是:
允许 80端口

允许 21端口
允许 8080端口
……
拒绝所有
允许 1723端口

由于“拒绝所有”在“允许 1723端口”的前面,所以仍然会被拒绝。
解决办法很简单,修改pptp的sh安装脚本,把-A改为-I,如下面的代码:

  1. iptables -I INPUT -p tcp –dport 1723 -j ACCEPT

复制代码

-I与-A的不同之处在于,-I是在现有规则的最前面添加新规则,-A是在后面。。

其实WDCP后台添加规则都是用的-I所以在WDCP后台打开TCP 1723也可以。
执行了上诉步骤将1723加入白名单以后,已经能够连接上了PPTP的VPN了,但是,很多人发现,无法打开网页,这又是怎么回事呢?
原来是:

  1. -A FORWARD -j RH-Firewall-1-INPUT

复制代码

搞的鬼,它造成数据包无法转发,这个RH-Firewall-1-INPUT中的规则就是“白名单模式”。。。我不解释大家也应该懂了吧?既然我们要把服务器作为网关使用,就干脆不要它,执行下面的命令:

  1. iptables -D FORWARD -j RH-Firewall-1-INPUT

复制代码

然后再执行下面的命令保存设置:

  1. service iptables save

复制代码

 

再重启防火墙:

  1. service iptables restart

复制代码


如果还是不行,则重新启动VPN试试

15 3月 2014

BandwagonHost $3.99 VPS + Vagex Robot 赚零花钱超详细教程

了解vagex吗?

 

不了解就看看这篇文章(点击直达)

 

3.99美元超值VPS(点击直达)

以下只针对debian系统的机器,其他机器请按照下面设置好相应环境

 

 

配置:
1.到 http://126.am/OQ6yM0 下载 VagexRobot.AllInOne.php 并保存到 /root 下
2.执行如下命令:
apt-get update && apt-get install php5-cli -y && apt-get install curl libcurl3 libcurl3-dev php5-curl -y && apt-get install screen -y && screen -S vagex

php /root/VagexRobot.AllInOne.php
3.查看: screen -r vagex

Vagex 比率:
Vagex固定在北京时间 14:10 更改比率。从 2 月的新规以后,比率已经不是每日更新的了。 Vagex 官方现在已经规定最高比率在 $1=35000 credit (实际上挂机 50 天之后,基本浏览视频数足以升级到 3 星会员, 3 星会员的汇率在 $1= 29750 credit 左右)

对于现在的比率,个人推测可能会是平时维持最高比率,在每个月的20号促销之后,会有低一些的比率。

但是个人建议,现在的最高汇率其实就可以提款。

Vagex 提款:
Vagex 的提款地址 http://vagex.com/members/exchange.php 要求提款邮箱必须是 Paypal 帐号的首要邮箱(paypal 可以绑定8个邮箱,可以设定一个邮箱为首要邮箱),所以提款前查询 Paypal 网站https://www.paypal.com/us/verified/pal=你的提款邮箱

多号收款如果注意了首要邮箱单一 Paypal 账户也一般没有问题。

Paypal 查询页面上两个邮箱都与你的提款邮箱都一样才可以验证成功。如果验证失败,VG网站会显示 UNVERIFY 点数会在一周内退回。

Vagex 发款的时间现在不那么稳定,基本在周五–下周三 之间浮动,除了20号的促销(可能会延迟一周),基本上每周都会发款一次。 提款时间建议在周五之前。

单号理论收益:
成本:约$4 * 2(每日视频限额约需 2 台机器挂满) = $8
收益:约$0.2 (此处按照 $1 = 20000 credit 汇率计算) * 365 = $73
利润:$65

11 3月 2014

实习—JQuery 自动触发事件

JQuery

常用模拟

有时候,需要通过模拟用户操作,来达到单击的效果。例如在用户进入页面后,就触发click事件,而不需要用户去主动单击。

在JQuery中,可以使用trigger()方法完成模拟操作。例如可以使用下面的代码来触发id为btn的按钮的click事件。

1 $('#btn').trigger("click");

这样,当页面加载完毕后,就会立刻输出想要的效果。也可以直接简写click(),来达到同样的效果:

1 $('#btn').click();

触发自定义事件

trigger()方法不仅能触发浏览器支持的具有相同名称的事件,也可以触发自定义名称的事件。例如为元素绑定一个“myClick”的事件,JQuery代码如下:

1 $('#btn').bind("myClick"function(){  
2      $('#test').append("<p>我的自定义事件.</p>");  
3  });

想要触发这个事件,可以使用以下代码来实现:

1 $('#btn').trigger("myClick");

传递数据

trigger(type[,data])方法有两个参数,第1个参数是要触发的事件类型,第2个参数是要传递给事件处理函数的附加数据,以数组形式传递。通常可以通过传递一个参数给回调函数来区别这次事件是代码触发的还是用户触发的。

下面是一个传递数据的例子。

1 $(function(){  
2    $('#btn').bind("myClick"function(event, message1, message2){  
3                  $('#test').append( "<p>"+message1 + message2 +"</p>");  
4     });  
5    $('#btn').click(function(){  
6         $(this).trigger("myClick",["我的自定义","事件"]);  
7    }).trigger("myClick",["我的自定义","事件"]);  
8 })

执行默认操作

trigger()方法触发事件后,会执行浏览器默认操作。例如:

1 $("input").trigger("focus");

以上代码不仅会触发为<input>元素绑定的focus事件,也会使<input>元素本身得到焦点(这是浏览器的默认操作)。

如果只想触发绑定的focus事件,而不想执行浏览器默认操作,可以使用jQuery中另一个类似的方法——triggerHandler()方法。

1 $("input").triggerHandler("focus");

该方法会触发<input>元素上绑定的特定事件,同时取消浏览器对此事件的默认操作,即文本框只触发绑定的focus事件,不会得到焦点。

07 3月 2014

vps开设最低权限的s-s+h帐号,用于上网代理『强力赚$版』

useradd -M -s /sbin/nologin -n username # 说明,username表示开通的ssh账号
userdel -r username # 删除用户
passwd username # 修改用户密码

操作实例演示:
比如要添加用户名为 SSH001 的账号,账号密码为:123 可以进行如下操作:
首先以root身份登录vps

[root@hc] useradd -M -s /sbin/nologin -n ssh001
[root@hc] passwd ssh001
Changing password for user ssh001
New UNIX password:123 # 实际操作中,这里的密码是不会显示的
Retype new UNIX password:123 # 实际操作中,这里的密码是不会显示的
passwd: all authenication tokens updated successfully.

注意:当你输入密码时,屏幕是没有任何字符显示的,系统会让你输入两次密码,来确认是否一致。
当出现最后一行的提示时,说明密码修改成功。