纯CSS3实现3D动画导航,html5 webRTC技术实现免费网页电话拨打
花了一周的时间完成了 说吧 (免费网页电话) 的前端开发工作,先将技术点总结如下:
免费电话采用最新的html5 webRTC 技术 实现互联网和电信MIS网互通实现网页电话,目前只有 google chrome 支持,如果你想实现免费电话拨打,测试地址:
https://www.10086china.com/index.html?id=OTkxMzA3MjUwODM3MzE5OQ== (长链接,顺便赚点积分,目前只支持chrome浏览器哦,哈哈)
1、 导航(主要采用纯CSS3 实现)
DOM:
<ul class="nav">
<li><a class="current" href="index.html">首页</a></li>
<li><a class="" href="features.html">功能介绍</a></li>
<li class="hassubnav"><a class="" href="jifenactive.html">活动<span class="navicon"></span></a>
<ul>
<li><a href="###" class="messages">邀请达人</a></li>
<li><a href="###" class="signout">签到达人</a></li>
<li><a href="###" class="signout">游戏达人</a></li>
</ul>
</li>
<li class="hassubnav"><a href="userinfo.html">个人中心<span class="navicon"></span></a>
<ul>
<li><a href="###" class="documents">我的积分</a></li>
<li><a href="###" class="messages">积分兑换</a></li>
<li><a href="###" class="signout">邀请记录</a></li>
<li><a href="###" class="signout">签到奖励</a></li>
</ul>
</li>
<li><a href="###">免费线路图</a></li>
</ul>
CSS (主要采用CSS3动画transition和伪类:after,:before)
.nav{ float:right; padding-top:53px;}
.nav li {float: left;line-height: 40px;padding-left: 20px;position: relative;}
.nav a {position: relative;color: #fff;font-size: 16px;height: 36px;line-height: 36px;display: inline-block;padding: 0 10px;border-radius: 15px;-moz-transition: 0.5s;-o-transition: 0.5s;- webkit-transition: 0.5s;transition: 0.5s;overflow: hidden;}
.nav a span {position: relative;display: inline-block;-webkit-transition: -webkit-transform 0.3s;-moz-transition: -moz-transform 0.3s;transition: transform 0.3s;}
.nav a span::before {position: absolute;top: 100%;content: attr(data-hover);-webkit-transform: translate3d(0,0,0);-moz-transform: translate3d(0,0,0);transform: translate3d(0,0,0);}
.nav a:hover span, #header .nav a:focus span {-webkit-transform: translateY(-100%);-moz-transform: translateY(-100%);transform: translateY(-100%);}
.nav li .navicon{ display:inline-block; width: 11px;height: 9px;background:url(../images/nav_icon_2.png) no-repeat left top; margin-left:5px; }
.nav li.hassubnav a{ width:100px; text-align:center; display: inline-block;height: 38px;border-bottom-right-radius:;border-bottom-left-radius:; padding:;}
.nav li.hassubnav a.current{ border-radius:15px; height:36px;}
.nav li.hassubnav:hover a.current{ height: 38px;border-bottom-right-radius:;border-bottom-left-radius:;}
.nav a.current, #header .nav a:hover, #header .nav li.hassubnav:hover a{ background-color:#004574;}
.nav li.hassubnav:hover ul a{ background:none;}
.nav ul {position: absolute;top: 40px;top: 38px\0;display: none\0;left: 20px;opacity:;background: #1f2024;-webkit-border-radius: 0 0 5px 5px;-moz-border-radius: 0 0 5px 5px;border-radius: 0 0 5px 5px;-webkit-transition: opacity .25s ease .1s;-moz-transition: opacity .25s ease .1s;-o-transition: opacity .25s ease .1s;-ms-transition: opacity .25s ease .1s;transition: opacity .25s ease .1s;width: 100px;z-index:;}
.nav ul li{ clear:both;padding-left:; background:#004574;width: 100px; text-align:center; border-top:1px solid #00629b;height:;overflow: hidden;padding:;-webkit-transition: height .25s ease .1s;-moz-transition: height .25s ease .1s;-o-transition: height .25s ease .1s;-ms-transition: height .25s ease .1s;transition: height .25s ease .1s;}
.nav ul li a{ background:none; border-radius:; font-size:14px; padding:;}
.nav li:hover > ul{ opacity:;*display:block;display:block\0;}
.nav li:hover > ul li{height: 36px;overflow: visible;padding:;line-height: 36px;}
.nav ul li:hover{ background:#0384e1;}
.nav ul li a:hover{ background:none;}
拨号盘功能:文本框只接受 数字,和手机号码检测,键盘按键和网页键盘对应
<div class="usercallbox userboxcon">
<div class="inpubox">
<input id="dial_input" type="text" value="" />
<span class="inputTips">输入手机号立即拨打</span>
<a href="javascript:void(0);" class="delvalulebtn"></a> <a href="javascript:void(0);" id="contactsbtn" class="contactsbtn"></a>
<div class="error_tips">请输入正确的手机号码!</div>
</div>
<div class="dialkey" id="dialkey">
<a href="javascript:void(0);" class="key_97 key_49" data="1"><span class="one">1</span></a>
<a href="javascript:void(0);" class="key_98 key_50" data="2"><span class="two">2</span></a>
<a href="javascript:void(0);" class="key_99 key_51" data="3"><span class="three">3</span></a>
<a href="javascript:void(0);" class="key_100 key_52" data="4"><span class="four">4</span></a>
<a href="javascript:void(0);" class="key_101 key_53" data="5"><span class="five">5</span></a>
<a href="javascript:void(0);" class="key_102 key_54" data="6"><span class="six">6</span></a>
<a href="javascript:void(0);" class="key_103 key_55" data="7"><span class="seven">7</span></a>
<a href="javascript:void(0);" class="key_104 key_56" data="8"><span class="eight">8</span></a>
<a href="javascript:void(0);" class="key_105 key_57" data="9"><span class="nine">9</span></a>
<a href="javascript:void(0);" class="key_96 key_48" data="0"><span class="zero">0</span></a>
</div>
<a href="javascript:void(0);" class="callbtn" id="callbtn"></a>
</div>
jquery插件
$.fn.keywork = function (options) {
var defaults = {
keyTarget:$('#dialkey')
},
_this = $(this),
deltag = _this.parent().find('.delvalulebtn'),
tiptag = _this.parent().find('.inputTips'),
params = $.extend(defaults, options || {});
_this.unbind('keyup').bind('keyup', keyUphandle).unbind('keydown').bind('keydown', keyDownhandle).blur(function(){
if('' == _this.val()) {
deltag.hide();
tiptag.show();
}
}).focus(function(){
// tiptag.hide();
});
tiptag.click(function(){
_this.focus();
})
deltag.click(function(){
var val = _this.val();
_this.focus().val(val.slice(0, val.length-1))
if( val.length < 2) deltag.fadeOut();
})
function keyhandle(keyEvent, fun){
var keycode = keyEvent.keyCode;
switch (keycode) {
case 48: // M:0
case 49: // M:1
case 50: // M:2
case 52: // M:4
case 53: // M:5
case 54: // M:6
case 55: // M:7
case 57: // M:9
case 96: // B:0
case 97: // B:1
case 98: // B:2
case 99: // B:3
case 100: // B:4
case 101: // B:5
case 102: // B:6
case 103: // B:7
case 104: // B:8
case 105: // B:9
case 51: // M:3
case 56: // M:8
fun(keycode);
deltag.fadeIn();
tiptag.hide();
break
}
}
function keyDownhandle(e) {
var e = e || window.event;
$(this).find('a').addClass('current');
keyhandle(e, function(Digit){
params.keyTarget.find('.key_'+Digit).addClass('current');
})
}
function keyUphandle(e) {
var e = e || window.event;
var val = $(this).val();
var keycode = e.keyCode;
params.keyTarget.find('.key_'+keycode).removeClass('current');
$(this).val(val.replace(/\D/g,''));
$('.error_tips').hide();
}
params.keyTarget.find('a').click(function(){
var digitV = $(this).attr('data');
var val = _this.val();
_this.focus().val(val + digitV);
deltag.fadeIn()
tiptag.hide();
return false;
});
}
$('#dial_input').keywork();
后续还有一些技术点会总结出来,欢迎批评指正,谢谢。
纯CSS3实现3D动画导航,html5 webRTC技术实现免费网页电话拨打的更多相关文章
- 纯css3实现的动画导航菜单
测试咯 css3 前端特效代码 网页模板 图片素材 css3 前端特效代码 网页模板 图片素材 css3 前端特效代码 网页模板 图片素材 css3 前端特效代码 网页模板 图片素材 css3 前端特 ...
- 纯CSS3悬停图标旋转导航动画代码
分享一款纯CSS3悬停图标旋转导航动画代码.这是一款鼠标移到图标上动画旋转显示导航菜单.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="x_con ...
- 一款纯css3实现的动画加载导航
之前为大家介绍了好几款导航菜单,今天为给大家再带来一款纯css3实现的动画加载导航.该导航出现的时候以动画的形式出现.效果图如下: 在线预览 源码下载 实现的代码. html代码: <ul ...
- 8个纯CSS3制作的动画应用及源码
对于一个复杂的图形或者动画来说,之前我们的处理方式是图片叠加或者利用CSS+JavaScript的方法,然而随着CSS3标准的不断成熟,我们甚至完全可以利用CSS3来绘制一些图片和制作丰富的动画特效. ...
- 纯css3实现的动画加载条
之前大大家分享了很多款加载条.今天给大家带来一款纯css3实现的动画加载条. 这款加载条适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8 ...
- 纯css3实现的动画加载特效
之前给大家带了很多款进度加载条,今天再给大家分享一款纯css3实现的动画加载特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="wrap& ...
- 一款纯css3实现的动画按钮
今天给大家分享一款纯css3实现的动画按钮.第一排的按钮当鼠标经过的背景色动画切换,图标从右侧飞入,第二排的按钮当鼠标经过的时候边框动画切换,图标右侧飞入,效果非常好,一起看下效果图: 在线预览 ...
- 一款纯css3实现的环形导航菜单
之前为大家介绍了好几款导航菜单,今天要给大家带来一款纯css3实现的环形导航菜单.该导航比较新鲜,列表图标位于中间,单击列表图标的时候,各项分布于列表图表的四周.形成一个环形.效果图如下: 在线预览 ...
- 纯css3加载动画
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name= ...
随机推荐
- 【转】代码编辑器(一)-TSynCompletionProposal用法
注意,本系列均转载自http://blog.163.com/zom1995@126/ 网上有人给我一个SynEdit这个东西,因为我很喜欢自己编个代码编辑器,但要是用Delphi直接弄的,就我现在这样 ...
- 百度 UEditor 简单安装调试和调用,网上其它的教程太官方了,不适合新手
对于新手来说,只要能实现功能即可,其它设置完全默认. 预览图: 1.首先 到官网下载,这个不多说.下载后解压到网站你想要的目录,我这里放到根目录下在你需要使用编辑器的地方,插入如下HTML代码: &l ...
- ok6410的LCD裸机范例
/****************************************** 实验步骤 1.配置引脚功能,将其GPI.GPJ引脚设置为VD数据输出模式,及GPJ后几位设置成LCD时钟输出: ...
- Python核心编程--学习笔记--7--字典和集合
本章介绍Python语言中的映射类型(字典)和集合类型,包括操作符.工厂函数.内建函数与方法. 1 字典 字典是Python中唯一的映射类型——键key直接映射到值value.字典是容器类型,其对象是 ...
- 同花顺面试经验(搜索引擎C++后台研发)
1.为什么要网页查重 ,怎么查重 2.软 硬cache是指什么 3.多线程编程:互斥变量 和 条件变量 函数怎么写 4.网络编程: epoll干什么的,有什么功能 5.网络编程:select 和 ep ...
- 行转列求和:不加 in 条件,sum的数据会不会准确?
我的习惯写法,担心不加 in 条件 ,统计结果会包含其他的数据 SELECT ZWKMYE_KJND as 年度,ZWKMYE_KJQJ as 月份,ZWKMYE_DWBH as 单位, ' then ...
- 最简单的耗时组件(窗口activity里面放一个progressBar)
①.先定义一个activity package com.example.administrator.actionbardemo; import android.app.Activity; import ...
- python中有趣的函数
filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决 ...
- 006--VS2013 C++ 加载其他格式图片,并显示半透明化
//--------------------------------------------MyPaint() 函数------------------------------------------ ...
- modelsim仿真错误解决办法
编译不成功可能是因为: 1.本身程序有问题. 2.没有设置顶层文件 3.modelsim 出现错误是不要只是看错误的地方,也要看前面的一部分