4.1.1 设置计算的样式属性值
4.1.1 设置计算的样式属性值
如果每次都增大或减小为预定的值,那么仍然可以使用.addClass()
方法。但是,这次假设我们希望每单击一次按钮,文本的字体大小就会持续地递增或递减。虽然为每次单击定义一个单独的类,然后迭代这些类也是可能的,但更简单明了的方法是每次都以当前字体大小为基础,按照一个设定的系数(例如40%)来递增字体大小。
同以前一样,我们的代码仍然是从$(document).ready()
和$('#switcher-large').click()
事件处理程序开始,参见代码清单4-1。
1 | $(document).ready(function() { |
接着,通过$('div.speech').css('fontSize')
可以轻而易举地取得当前的字体大小。不过,由于返回的值中包含数字值及其单位(px
),需要去掉单位部分
才能执行计算。同样,在需要多次使用某个jQuery
对象时,最好也把这个对象保存到一个变量中,从而达到缓存数据的目的。为此,就需要引入两个变量,参见代码清单4-2。
1 | $(document).ready(function() { |
$(document).ready()
中的第一行代码把<div class="speech">
保存到一个变量中。注意变量名$speech
中的$。由于$
是JavaScript
变量中合法的字符,因此可以利用$
来提醒自己该变量中保存着一个jQuery
对象。与PHP
等编程语言不同,$
符号在jQuery
或者说JavaScript
中没有特殊的含义。
在.click
处理程序中,通过parseFloat()
函数只取得字体大小属性中的数值部分。parseFloat()
函数会在一个字符串中从左到右地查找一个浮点(十进制)数。例如,它会将字符串’12’转换成数字12。另外,它还会去掉末尾的非数字字符,因此’12px'
就变成了12。如果字符串本身以一个非数字开头,那么parseFloat()
会返回NaN
,即Not a Number
(非数字)。
至此,所剩的就是修改解析后的数值并根据新值来重设字号大小了。在这个例子中,我们要在每次按钮被单击时把字号增大40%。为此,可以将num
乘以1.4,然后再连接num
和’px'
来设置字体大小,参见代码清单4-3。
1 | $(document).ready(function() { |
现在,当用户单击Bigger
按钮时,文本会变大,再次单击,会继续变大,如图4-2所示。
要通过单击Smaller
按钮减小字体大小,应该使用除法而不是乘法,即num /= 1.4
。同样,更好的方案是把对这两个按钮的单击操作,通过<div id="switcher">
中的<button>
元素组合到一个.click()
处理程序中。在查找到数值后,再根据用户单击的按钮ID
来决定使用乘法还是除法,如代码清单4-4。
1 | $(document).ready(function() { |
根据第3章学习的内容,我们知道可以访问this.id
得到this
引用的DOM
元素的id
属性,因而就有了if
和else if
语句中的代码。这里,如果仅测试属性的值,使用this
显然要比创建jQuery
对象更有效。
如果提供一种方式能够返回字体大小的初始值当然更好了。为了做到这一点,可以在DOM
就绪后立即把字体大小保存在一个变量中。然后,当用户单击Default
按钮时,再使用这个变量的值。虽然可以通过再添加一个else if
语句来处理这次单击,但此时改用switch
语句应该更合适,参见代码清单4-5。
1 | $(document).ready(function () { |
在此,仍然是检查this.id
的值并据以改变字体大小,但如果它的值既不是'switcher-large'
也不是'switcher-small'
,那么就应该使用默认的初始字体大小。
总结
.addClass()方法不适用于动态设置样式
.addClass()
方法适用于设置样式为固定值的情况。
如果希望样式持续的增大或减小,则要定义多个类,然后再迭代这些类来实现持续变大或变小的效果.这种方式麻烦。
如何获取DOM元素中字体的大小
$('选择符').css('fontSize')
可以轻而易举地取得该DOM
中的字体大小,这个方法的返回值包含数字
和单位
。
保存jQuery对象的变量名命名规则
可以在变量名中加入$
符号来提醒自己该变量中保存着一个jQuery
对象
parseFloat()函数
parseFloat()函数的功能
parseFloat()函数可以取得字符串中的数字部分,例如:通过parseFloat()
函数只取得字体大小属性中的数值部分parseFloat()
函数会在一个字符串中从左到右地查找一个浮点(十进制)数。例如,
- 它会将字符串
'12'
转换成数字12。 - 另外,它还会去掉末尾的非数字字符,因此
'12px'
就变成了12
。 - 如果字符串本身以一个非数字开头,那么
parseFloat()
会返回NaN
,即Not a Number
(非数字)。
如何通过按钮来持续的增大或减小字体的大小
在$(document).ready()
方法的匿名函数中写入方法,算法描述如下
- 1.获取要操作的
DOM
元素的jQurey
对象 - 2.保存该
jQurey
对象的fontSize
样式属性的值 - 3.监听按钮点击事件
- 3.1获取
jQurey
对象的fontSize
样式属性值中的数值部分 - 3.2根据触发点击事件
DOM
元素的id来判断具体触发的是哪个按钮- 如果是增大按钮,则使用乘法增大字体大小
- 如果是减小按钮,则使用除法减小字体大小
- 如果是默认按钮,则获取默认的
fontSize
属性值中的数值部分
- 3.1获取
- 4.拼接数值和单位组成
fontSize
的属性值,然后通过jQury
对象的css
方法更新fontSize
属性的属性值