为了能对区块的产生有一个更直观的认识,想让最新区块的产生有一个动画的展示效果(从无到有的弹入)。这里用js的animate
函数来实现。之前有提到每个区块都用了伪类来添加样式,所以这里还需要对伪类样式作一些修改。
伪类样式修改方案
元素的before和after伪类的样式修改方案
要实现某个元素的before和after伪类的样式修改,方法有4种。CSS中并不能直接选择某一个元素的:before
和:after
伪类元素。
举个栗子说明4种方案
HTML结构
<div class="box">Hello,it's me.</div>
CSS样式
.box:after{
content: '',
font-weight: bold
}
方案1
使用js或者jQuery改变,为元素添加类
.blue:after{
content: '',
background-color: blue
}
$('div').addClass('blue');
方案2
在存在的style文档中动态插入样式
document.styleSheet[0].addRule('.box:after','background-color:blue');
document.styleSheet[0].insertRule('.box:after{background-color:blue}',0);
方案3
创建一份新的样式表,并使用js或jQuery将其插入到head标签中
var style = document.creatElement('style');
document.head.appendChild(style);
sheet = style.sheet;
sheet.addRule('.box:after','background-color:blue');
sheet.insetRule('.box:after{background-color:blue}',0);
<!-- 插入操作 -->
$('<style>.box:after{background-color:blue}</style>').appendTo('head');
方案4
使用HTML5的data-
属性,在属性中使用attr()
动态修改
先给div标签增加data-attr = 'orange'
属性,然后用jQuery修改该属性值
.box:after{
content: '',
font-weight: bold,
data-attr: 'orange'
}
$('div').attr('data-attr','blue');
我的练习
最新区块修改伪类样式
说明:每个区块在展示时,因为有额外的图片和时间信息需要展示,所以借助了伪类before
和after
具体实现可Pick我。
- 原来的做法:在CSS中选择要应用伪类的元素,然后设置伪类样式
图1 直接选择要应用伪类的元素,然后设置样式
- 现在的做法:给某个类名设置伪类样式,然后将该类名添加给需要该样式的元素。用的是上面提到的4个方案中的方案1,这是比较简洁和方便的做法。
注意:
after
伪类显示区块产生时间,需要通过js设置data-content
属性值,CSS用content
属性,获取属性data-content
的值
图2 给某个类名应用伪类样式,before类设置小三角图片,after类显示区块产生时间
动态弹入效果
动态展示的最新区块,其HTML结构与其他区块不同,且还需要改变它的伪类样式。
实现过程
动态添加节点
首先把最新区块与其他区块分开。最新区块在页面加载完时是没有的,在写入区块信息之前,动态添加最新区块的节点。最新区块的HTML结构相比于其他区块,多了一层大的div.bnew,作用是为了显示链条的背景图,小三角,区块的产生时间(用到了before
和after
伪类,如图2所示)。因为每次刷新都需要动态添加最新区块的节点,因而在添加前需要把上一次的节点remove掉,所以具体实现如下所示。
图3 jQUery动态操作节点
动画方法
动画实现用到的是jQuery的animate()方法,语法包含4个参数
$(selector).animate(styles,speed,easing,callback)
参数的具体设置如下:
1 .首先动态修改style
参数。通过marginLeft
来控制进入方向;width
来控制显示范围;opacity
控制初始的隐藏状态;
2 .然后填加动画时间为2000ms。
具体如图4所示。
图4 给最新区块
div.bnew
添加动画
初始的div.bnew
的CSS样式
图5 初始的
div.bnew
样式设置
注:因为在animate方法中,
display
属性无法起作用,所以在初始的样式设置中要用opacity
属性。
3 .注意easing
参数的设置,内置的只有2种,如下所示。
若要用到其他的运动轨迹需要添加库,然后引用,这里引用的是easeOutBounce
。详细参数引用可Pick我
4 .最后回调函数callback
的设置。为div.bnew
添加类名bnewT
(伪类样式的设置)放在这里,如图4所示。