css中在div上悬停鼠标怎样可以让他透明的显示下面的图片,而不是像这样一块白板?

[js高手之路]打造通用的匀速运动框架

本文,是接着上文继续的,在这篇文章的最后,我们做了2个小实例:侧边栏与改变透明度的淡入淡出效果,本文我们把上文的animate函数,继续改造,让他变得更加的通用和强大:

1,支持多个物体的运动

这三种运动方式也是jquery中animate函数支持的

一、animate函数中怎么区分变化不同的样式?

上文中,侧边栏效果 用的animate函数 改变的是left值

淡入淡出效果 用的animate函数 改变的是透明度

而我们封装的函数,要变成通用的,首先面临的问题就是 这个函数要同时支持left值和透明度的变化,更通用的做法应该是要支持所有的样式变化,比如轮播功能,他有左右滑动,也有上下滑动。

我们可以在获取样式和改变样式的时候,做一下判断就可以了,判断分2类就能达到目的,因为其他样式( margin, left, top, right, font-size等等 )都是px,而透明度没有px单位

合并之后的animate相比之前多了一个参数attr, 这个参数就是变化的样式,obj: 变化的对象, target: 样式需要变化到的目标值.  speed: 样式每次变化的大小

oImg是获取到的图片对象. 这里各参数意思如下:

this:当前图片对象

100: 鼠标移到图片上时,透明度变成100

10: 透明度每次在原来的基础上加10

上述就是完整的代码实例,请自行展开,点击run code预览效果 

当你分别测试这两个功能的时候:

移动到图片上然后移出来

移动到分享到,然后移出来

移动到 分享到,然后迅速又移动到图片上, 这个时候你会发现 分享到 停下来了,这就不符合逻辑了! 按道理来说,鼠标移动到图片上,相当于触发了 “分享到” 的mouseout( 鼠标移出事件 ),那么  "分享到" 这个时候要隐藏,并不是停止。 为什么会这样呢?因为这两个运动共享了一个定时器,当鼠标移动到图片上,开启定时器的时候,把“分享到”的定时器给停了。那么再做多物体运动的时候,我们就要把定时器拆分,每个对象都要有一个定时器,怎么做呢? 非常简单,不要定义一个简单的timer变量,我们只要把timer加在obj对象上,那么每个对象都有一个timer属性,就达到定时器的分离效果了

修改之后的完整代码如下,请自行展开:

至此,我们就完成了多物体运动与不同样式的修改

二、让animate函数支持多个样式同时改变

完整的同时运动变化 代码:

请自行展开这段代码,这段代码能够同时运动,但是有一个问题:

变化时间一样( 每30毫秒变化一次 )

你能想到什么问题吗?( 两个人在同一起跑线上,速度一样, 时间一样,但是要同时到达不同的目标,一个500, 一个400 )

答案是很明显的,肯定是目标近的( height : 400 )那个先到达,然后把对象上的定时器关了,另一个目标更远的( 500 )肯定到达不了

你可以在这句代码下面,输出当前的值和目标值:

那么我们怎么解决这个问题呢?

其实也好办,就是height = 400的时候 不要把定时器关了,应该等width = 500的时候再关闭定时器,不就在同一时间,完成了同时到达目标的效果吗?

声明一个变量,每次变化完一次( width, height )样式 把bFlag = true, 只要在for循环中有一个没有到达目标,bFlag的值都是false,这样就不会关闭定时器。当两个都到达目标,才关闭定时器.

 如样式变化,按顺序来,不是同时变化, 如:

当把width变成500px的时候,如果传递了回调函数, 再接着执行回调函数里面的运动

17 //回调函数: 把函数当做参数传递给另一个函数
}

一些背景图片随着鼠标的移动的反向的移动,感觉跟不错,下面为大家介绍喜爱使用css3让div随鼠标移动而抖动起来,感兴趣的朋友可以参考下

}

我要回帖

更多关于 css实现点击显示 隐藏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信