jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】


Posted in Javascript onNovember 09, 2016

本文实例讲述了jQuery模拟实现经典FLASH导航动画效果的方法。分享给大家供大家参考,具体如下:

一、前言:

FLASH在中国互联网发展初期的时候非常的热,各种各样的矢量造型和动作,加上专门配制的音效,让很多人眼前一亮,并且让很多人迷上了这种新兴的媒体,那时候兴起了很多大大小小的专门发布FLASH的网站,印象中记得的像“FLASH闪吧”、“FLASH帝国”、“闪客天地”等这些都是很火很热的网站,在当时盛极一时,由此也产生了一大批的专门从事FLASH的开发者,我们时尚的称之为“闪客”。//是不是想到了某些动画片中的貌似隐者的那种习惯使用快剑的剑客呢?

我印象中比较出名的是的《小破孩》系列的动画,另外还有《鹿鼎记》、《大话西游》、《水浒Q传》等系列的做得非常精致的动画,在我那个情窦初开的年代,都专门买了光盘看了和收集了起来,还专门买了很多FLASH制作的书来学习,希望有一天也可以做出一个像样的作品,但是到现在为止也没有做出一个像样的作品,最多只能做一些图片加文字版的MV,惭愧啊。可以说,FLASH在那时候基本上是到达了顶峰时期。

从那以后,网络开始进入WEB2.0的时代,由于现代社会工作节奏的加快,FLASH的更新速度慢、开发的时间周期长、新的技术和应用不断涌现以及一些纯FLASH作品发布的站点不营利以及网络传送等带来的一系列的问题,辉煌的FLASH开始走下坡路,再也回复不到当年的辉煌时期了。尽管Macromedia公司最后在2005年被ADOBE收购,并且推出新的版本和3.0的AS,但也没法挽回下滑的局面。

到了今天,市场的份额已经远远回不到当年巅峰时期了,但仍有不少的人在孜孜不倦的研究和使用这个曾经带给我们那么多梦想和美好的FLASH,仍有不少优秀的作品在流传着,不管苹果放弃支持FLASH,或是在新的技术下,以后FLASH会退出舞台,但我们对FLASH都深存敬意。

哈哈,好像扯远了,回归正题。

二、正题

新的HTML5和CSS3的诞生后,有人预言FLASH会被这些新的技术取代,我觉得这个可能性不大,两者的方向不同,起码在目前的阶段还不用担心这个问题。

作为一名前端攻城狮认为,在我们的WEB开发中,FLASH的使用以尽量少用为妙,如一些FLASH的网站或是导航或其他页面的元素等,因为FLASH对搜索引擎不友好,搜索引擎无法抓取里面的内容,所以在我们的一般开发中,特别是大型的或门户的网站开发中都不使用FLASH,但是FLASH以其特别畅游的动画效果仍会吸引很大的一部分人来使用它来做网站整站或是一些效果。

在一些项目中,客户要求要某个站点上用FLASH效果来做导航,唯一的一个原因是觉得动画好看,但对于我们这些前端攻城狮,代码狂,一是不会做FLASH,二是直接将别人的FLASH拿下来也不合适,因为别人的是针对项目来开发的,里面有很多的AS也是和项目关联起来的,所以也拿下来了也无法使用,三是有SEO或是代码洁癖,喜欢折腾,总想通过其他各种不同的方法来实现,有不折腾到死也不会满足的心态,所以就有了下面的这样一个折腾——js模拟的flash导航效果折腾。

要折腾的效果如下图:

jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】

具体的效果请看DEMO ,点击此处打开

像DEMO里的这个这样的FLASH导航,里面除了AS的一些条件的判断外,还有XML的脚本配置,真的是没有扎实的AS知识,想改造过来都很难,哈,还不如对脆直接模拟来做效果,且收录要比FLASH来得好哈。

想尝试用HTML5和CSS3应该可以实现的,但想想,浏览器的兼容性还是一个很大的问题,由于HTML5和CSS3项目中用得少,也比较菜,所以还是JS算了,但JS本身也非常的菜,JQuery略懂一些,就直接用JQuery来搞了,等以后浏览器都完美的支持HTML3和CSS3或我有空的时候,再来重新写一下这个效果哈。

说干就干,说做就做,首先来说一下思路。

这个分上下两个部分,上面是大分类,下面是二级分类,动画是一个向上,一个向下,动画利用JQuery中的animate可以做到,鼠标的移上和移出就是一个hover的事件进行触发,基本涉及的就主要是这两个函数了,其他的一些小地方就在实际的过程中进行细节调整就可以了。

于是就有了下面基于JQuery的核心脚本(这个代码有点长,其实没什么特别的地方,和我们平常写的基本一样,HTML和CSS请到DEMO页中查看,因有使用图片就不贴出来了)

$("#nav>li>a").wrapInner( '<span class="out"></span>' ).append( '<span class="bg"></span>' );
$("#nav>li>a").each(function() {
  $( '<span class="over"><strong>' + $(this).text() + '</strong></span>' ).appendTo( this );
});
$("#nav>li>a:not('.cur')").hover(function() {
  $(".out",this).stop().animate({'top':'65px'},250); // 向下滑动 - 隐藏
  $(".over",this).stop().animate({'top':'0px'},250); // 向下滑动 - 显示
  $(".bg",this).stop().animate({'top':'0px'},  120); // 向下滑动 - 显示
}, function() {
  $(".out",this).stop().animate({'top':'0px'},250); // 向上滑动 - 显示
  $(".over",this).stop().animate({'top':'65px'},250); // 向上滑动 - 隐藏
  $(".bg",this).stop().animate({'top':'65px'},120); // 向上滑动 - 隐藏
});
$("#nav>li:not(':first'):not(':last')").hover(function() {
  $(".navBg").stop().animate({'height':'44px'},120);
  $(this).children(".snav").stop(true).css({"left":- $(this).position().left}).show();
}, function() {
  $(".navBg").stop().animate({'height':'0px'},120);
  $(this).children(".snav").stop(true).hide();
});
$(".snav>a").wrapInner( '<span class="out"></span>' ).append( '<span class="bg"></span>' );
$(".snav>a").each(function() {
  $( '<span class="over">' + $(this).text() + '</span>' ).appendTo( this );
});
$(".snav>a:not('.cur')").hover(function() {
  $(".out",this).stop().animate({'top':'-44px'},250); // 向上滑动 - 隐藏
  $(".over",this).stop().animate({'top':'0px'},250); // 向上滑动 - 显示
  $(".bg",this).stop().animate({'top':'0px'},  120); // 向上滑动 - 显示
}, function() {
  $(".out",this).stop().animate({'top':'0px'},250); // 向下滑动 - 显示
  $(".over",this).stop().animate({'top':'-44px'},250); // 向下滑动 - 隐藏
  $(".bg",this).stop().animate({'top':'-44px'},120); // 向下滑动 - 隐藏
});

三、结语

虽然模拟的效果与用FLASH的效果还有一定的差距,个人觉得效果能够达到FLASH的80%左右吧,但基本上影响不大,且利于SEO,且加载的速度也明显的比FLASH加载得快,所以个人觉得还可以接受,但有时候客户是否接受,就需要一些沟通了。

总的来说,FLASH和模拟的各有优缺点,在不同的环境中各有千秋,没有好与不好的说法,只能说看需求和取舍,有时候,客户需要就是一定要这样搞,你也必须要这样搞,客户永远都是上帝,技术这些东西在某些人眼里就是一坨一坨的哈,但对于我个这样的一些对于代码乐此不倦折腾的的伪程序猿来说,虽然有技术的情结在里面,对于一些客户的需求也无可奈何,能让我们快乐的是在于折腾的过程和实现的喜悦并进行分享。你说是么?

完整demo实例代码点击此处本站下载

(PS:本文在作者原文的基础上针对demo演示做了大量简化并提供了demo源码的下载,以期可以直接将最核心的部分展现给读者。)

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
js setattribute批量设置css样式
Nov 26 Javascript
Javascript实现的类似Google的Div拖动效果代码
Aug 09 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
jquery自定义插件开发之window的实现过程
May 06 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
jQuery实现元素的插入
Feb 27 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
Vue 2.5.2下axios + express 本地请求404的解决方法
Feb 21 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
jquery更改元素属性attr()方法操作示例
May 22 jQuery
微信小程序  modal详解及实例代码
Nov 09 #Javascript
微信小程序  action-sheet详解及实例代码
Nov 09 #Javascript
浅谈EasyUI常用控件的禁用方法
Nov 09 #Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
Nov 09 #Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 #Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 #Javascript
JavaScript动态检验密码强度的实现方法
Nov 09 #Javascript
You might like
自定义PHP分页函数
2006/10/09 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
Javascript 中的类和闭包
2010/01/08 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
JS与C#编码解码
2013/12/03 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
Python中的XML库4Suite Server的介绍
2015/04/14 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
3分钟学会一个Python小技巧
2018/11/23 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
护理实习自我鉴定
2013/12/14 职场文书
求职信模板
2014/05/23 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
入党自荐书范文
2015/03/05 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL