这很正常很完美,因为红色、绿色和蓝色的值都是数字。试试,如果当你传入了一些其他意外的东西:
在这个结果的最后你看到了一个NaN,NaN代表不是一个数字(Not a Number)。如果你把颜色的值作为硬编码写在代码里面,这种情况可能不会出现。但是如果你是从一个输入表单获得的这
个值,那么你很可能会碰到这样的情况,你需要去处理这样一些不符合要求的输入值。
toInt()因此,现在我们需要一种方式确保传给rgbToHex()方法的参数都是数字这里就需要使用toInt()方法了。toInt()是另一个相对简单的函数。你可以在一个变量上调用它,那么它将尽可能地将它转换成一个整数。
参考代码: toIntDemo = (make_me_a_number){ number = make_me_a_number.toInt(); alert ( + number);}
正如你说看到的,toInt()方法并不能处理所有你可以想到的情况,不过幸亏有了MooTools里面另外一个很酷的方法叫做$type(),我们也可以很好地处理那个问题。
$type()$type()是另外一个来自MooTools的令人不可思议的简单和有用的东西。它可以检查你传入的无论什么变量,然后返回一个字符串,告诉你这个变量是什么类型:
参考代码: checkType = (variable_to_check){ variable_type = $type(variable_to_check); alert( + variable_type);}(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
那里还有许多$type()方法可以检测的类型你可以在这个中找到一个完整的列表。不过现在,我们真正关心的是怎么检测整数。如果我们在
toIntDemo()方法中使用$type()方法,那么我们就可以很容易地处理那些toInt()不能处理的输入了:
参考代码: toIntDemo = (make_me_a_number){ number = make_me_a_number.toInt(); ($type(number) != ){number = ;} alert( + number);}
当我们把它们和changeColor()方法组合起来,我们就可以得到一个几乎接近完美的解决方案了:
参考代码: = (red_value, green_value, blue_value){ red_value = red_value.toInt(); green_value = green_value.toInt(); blue_value = blue_value.toInt(); ($type(red_value) != ){red_value = ;} ($type(green_value) != ){green_value = ;} ($type(blue_value) != ){blue_value = ;} color = [red_value, green_value, blue_value].rgbToHex(); alert( + color); }
最后一个方法中传给rgbToHex()方法的数字超过了RGB允许值0-255的范围,这个值还是被忠实地转换成了它的十六进制值。不幸的是,这意味着我们接受了一个超过那个范围的数字,我们将不能得到一个有效的十六进
制颜色值。幸运的是,MooTools中哎呦另外一个方法,我们可以用来处理这个问题。
limit()MooTools中的方法也是非常简单直接的。你可以在一个数字上面调用这个方法,传入一个这个数字允许的最小值和一个允许的最大值作为参
数,它会自动地进行舍入处理。你还需要牢记这一点:limit方法需要传入整数参数,因此一般在使用limit方法之前先对你要指定为数字的东西(或者其他在
Number Collection)
参考代码: limitDemo = (number_to_limit){ number_to_limit = number_to_limit.toInt(); limited_number = number_to_limit.limit(, ); alert( + limited_number);}示例代码
把上面的方法和我们刚才的changeColor()方法混合起来试试:
参考代码: changeColor = (red_value, green_value, blue_value){ red_value = red_value.toInt(); green_value = green_value.toInt(); blue_value = blue_value.toInt(); ($type(red_value) != ){red_value = ;} ($type(green_value) != ){green_value = ;} ($type(blue_value) != ){blue_value = ;} red_value = red_value.limit(, ); green_value = green_value.limit(, ); blue_value = blue_value.limit(, ); color = [red_value, green_value, blue_value].rgbToHex(); alert( + color); }更多学习
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)