首页 热点 业界 科技快讯 数码 电子消费 通信 前沿动态 电商

今头条!基于JS实现动态跟随特效的示例代码

2022-06-20 10:09:39 来源 : 软件开发网

目录

演示

技术栈

源码


(资料图片仅供参考)

css部分

js部分

演示技术栈

这次用到了关于css的一些功能,和jQuery。

CSS3中添加的新属性animation是用来为元素实现动画效果的,但是animation无法单独担当起实现动画的效果。承载动画的另一个属性——@keyframes。使用的时候为了兼容可加上-webkit-、-o-、-ms-、-moz-、-khtml-等前缀以适应不同的浏览器。

创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式。

通过 @keyframes 规则,您能够创建动画。

@keyframes定义一个动画,并定义具体的动画效果,比如是放大还是位移等等。

@keyframes 它定义的动画并不直接执行,需要借助animation来运转。

在动画过程中,您能够多次改变这套 CSS 样式。

以百分比来规定改变发生的时间,或者通过关键词 “from” 和 “to”,等价于 0% 和 100%。

源码css部分.container{text-align:center;perspective:500px;-webkit-perspective:500px;border: 1px solid;}.example{display:table-cell;vertical-align:middle;color: #fff;width: 150px;height: 150px;background:url(../images/01.jpg) no-repeat;}@-webkit-keyframes topenter { from { -webkit-transform-origin:top; -webkit-transform:rotateX(-90deg); } to { -webkit-transform-origin:top; -webkit-transform:rotateX(0deg); }}@keyframes topenter { from { transform-origin:top; transform:rotateX(-90deg); } to { transform-origin:top; transform:rotateX(0deg); }}@-webkit-keyframes topleave { from { -webkit-transform-origin:top; -webkit-transform:rotateX(0deg); } to { -webkit-transform-origin:top; -webkit-transform:rotateX(-90deg); }}@keyframes topleave { from { transform-origin:top; transform:rotateX(0deg); } to { transform-origin:top; transform:rotateX(-90deg); }}@-webkit-keyframes bottomenter { from { -webkit-transform-origin:bottom; -webkit-transform:rotateX(90deg); } to { -webkit-transform-origin:bottom; -webkit-transform:rotateX(0deg); }}@keyframes bottomenter { from { transform-origin:bottom; transform:rotateX(90deg); } to { transform-origin:bottom; transform:rotateX(0deg); }}@-webkit-keyframes bottomleave { from { -webkit-transform-origin:bottom; -webkit-transform:rotateX(0deg); } to { -webkit-transform-origin:bottom; -webkit-transform:rotateX(90deg); }}@keyframes bottomleave { from { transform-origin:bottom; transform:rotateX(0deg); } to { transform-origin:bottom; transform:rotateX(90deg); }}@-webkit-keyframes leftenter { from { -webkit-transform-origin:left; -webkit-transform:rotateY(90deg); } to { -webkit-transform-origin:left; -webkit-transform:rotateY(0deg); }}@keyframes leftenter { from { transform-origin:left; transform:rotateY(90deg); } to { transform-origin:left; transform:rotateY(0deg); }}@-webkit-keyframes leftleave { from { -webkit-transform-origin:left; -webkit-transform:rotateY(0deg); } to { -webkit-transform-origin:left; -webkit-transform:rotateY(90deg); }}@keyframes leftleave { from { transform-origin:left; transform:rotateY(0deg); } to { transform-origin:left; transform:rotateY(90deg); }}@-webkit-keyframes rightenter { from { -webkit-transform-origin:right; -webkit-transform:rotateY(-90deg); } to { -webkit-transform-origin:right; -webkit-transform:rotateY(0deg); }}@keyframes rightenter { from { transform-origin:right; transform:rotateY(-90deg); } to { transform-origin:right; transform:rotateY(0deg); }}@-webkit-keyframes rightleave { from { -webkit-transform-origin:right; -webkit-transform:rotateY(0deg); } to { -webkit-transform-origin:right; -webkit-transform:rotateY(-90deg); }}@keyframes rightleave { from { transform-origin:right; transform:rotateY(0deg); } to { transform-origin:right; transform:rotateY(-90deg); }}js部分$(function () { //initialize $(".container").css({ "perspective-origin": "50% 0%", "-webkit-perspective-origin": "50% 0%" }); $(".container .example").css({ "animation": "topleave 400ms forwards", "-webkit-animation": "topleave 400ms forwards" }); $(".container").bind("mouseenter mouseleave", function (e) { var dir = getDirection($(this), e), enter = e.type === "mouseenter", topPerspectiveOrigin = { "perspective-origin": "50% 0%", "-webkit-perspective-origin": "50% 0%" }, rightPerspectiveOrigin = { "perspective-origin": "100% 50%", "-webkit-perspective-origin": "100% 50%" }, bottomPerspectiveOrigin = { "perspective-origin": "50% 100%", "-webkit-perspective-origin": "50% 100%" }, leftPerspectiveOrigin = { "perspective-origin": "0% 50%", "-webkit-perspective-origin": "0% 50%" }, $target = $(this).find(".example"); switch (dir) { case 0: if (enter) { $(this).css(topPerspectiveOrigin); $target.css({ "animation": "topenter 400ms forwards", "-webkit-animation": "topenter 400ms forwards" }); } else { $(this).css(topPerspectiveOrigin); $target.css({ "animation": "topleave 400ms forwards", "-webkit-animation": "topleave 400ms forwards" }); }; break; case 1: if (enter) { $(this).css(rightPerspectiveOrigin); $target.css({ "animation": "rightenter 400ms forwards", "-webkit-animation": "rightenter 400ms forwards" }); } else { $(this).css(rightPerspectiveOrigin); $target.css({ "animation": "rightleave 400ms forwards", "-webkit-animation": "rightleave 400ms forwards" }); }; break; case 2: if (enter) { $(this).css(bottomPerspectiveOrigin); $target.css({ "animation": "bottomenter 400ms forwards", "-webkit-animation": "bottomenter 400ms forwards" }); } else { $(this).css(bottomPerspectiveOrigin); $target.css({ "animation": "bottomleave 400ms forwards", "-webkit-animation": "bottomleave 400ms forwards" }); }; break; case 3: if (enter) { $(this).css(leftPerspectiveOrigin); $target.css({ "animation": "leftenter 400ms forwards", "-webkit-animation": "leftenter 400ms forwards" }); } else { $(this).css(leftPerspectiveOrigin); $target.css({ "animation": "leftleave 400ms forwards", "-webkit-animation": "leftleave 400ms forwards" }); }; break; } }); }) function getDirection($element, event) { var w = $element.width(), h = $element.height(), x = (event.pageX - $element.offset().left - (w / 2)) * (w > h ? (h / w) : 1), y = (event.pageY - $element.offset().top - (h / 2)) * (h > w ? (w / h) : 1), direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4; return direction; }

到此这篇关于基于JS实现动态跟随特效的示例代码的文章就介绍到这了,更多相关JS动态跟随特效内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!

标签: 动画效果 希望大家 直接执行

相关文章

最近更新
观焦点:超萌相机 2023-03-01 12:29:37
海南百货网 2023-03-01 12:13:44
焦点热讯:宜点充 2023-02-28 10:10:16
天天关注:小铺CEO 2023-02-28 10:07:13
【世界聚看点】KaFit 2023-02-28 09:31:37
葱天下 2023-02-28 09:17:03
渔界竞钓 2023-02-28 08:15:29
焦点快看:鲸奇视频 2023-02-28 06:30:37
环球热议:萝小逗 2023-02-27 23:25:49
简讯:小码公交 2023-02-27 23:16:12
彼岸花 2023-02-27 22:32:52
时时夺宝 2023-02-27 21:37:50
天天动态:袜之源 2023-02-27 21:29:50
天天资讯:AI空气 2023-02-27 20:19:46
世界时讯:绘读 2023-02-27 20:19:41
看点:一元得购 2023-02-27 19:26:28