弹出层,验证码,省市地区选择,国际电话区号选择等插件的使用
一.layer的弹出层,有bug,或许是跟当前的JS冲突,所以,使用了zdialog.js
参考链接:http://www.jq22.com/jquery-info18718
引入三个文件,分别是,jquery.js,zdialog.js,zdialog.css
其中,具体的样式,可以在zdialog.css里进行修改。不过,他的css写的其实挺漂亮了。
比如,他们的提示框,从上到下有三部分,分别是:标题,内容,确定。
我直接修改,标题的样式为display:none;就更加简化了这个提示框。
二.验证码。使用了canvas来绘制验证码。
参考链接是 https://www.17sucai.com/pins/28988.html
使用canvas绘图的时候,如果绘制的图片超出了div,会显示不全,并会造成无法对比。
可以在JS里设置图片的位置。具体代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | <!DOCTYPE html> <html lang= "en" > <head> <meta charset= "UTF-8" > <meta name= "viewport" content= "width=device-width, initial-scale=1.0" > <title>Document</title> <style type= "text/css" > *{ margin:0; padding: 0; box-sizing: border-box; } html{ width: 100%; height: 100%; font-size: 16px; } body{ width: 100%; height: 100%; -moz-user-select: none; /*火狐*/ /*禁止用户在页面选择文字*/ -webkit-user-select: none; /*webkit浏览器*/ -ms-user-select: none; /*IE10*/ -khtml-user-select: none; /*早期浏览器*/ user-select: none; } .code{ width: 400px; margin:0 auto; } .input-val{ width: 295px; background: #ffffff; height: 2.8rem; padding: 0 2%; border-radius: 5px; border: none; border: 1px solid rgba(0,0,0,.2); font-size: 1.0625rem; } #canvas{ float:right; display: inline-block; border:1px solid #ccc; border-radius: 5px; cursor: pointer; } .btn{ width: 100px; height: 40px; background: #f1f1f1; border: 1px solid #ccc; border-radius: 5px; margin: 20px auto 0; display: block; font-size: 1.2rem; color: #e22e1c; cursor: pointer; } </style> </head> <body> <div class = "code" > <input type= "text" value= "" placeholder= "请输入验证码(不区分大小写)" class = "input-val" /> <canvas id= "canvas" width= "100" height= "43" ></canvas> <button class = "btn" >提交</button> </div> <script src= "http://libs.baidu.com/jquery/2.1.4/jquery.min.js" ></script> <script type= "text/javascript" > $( function (){ var show_num = []; draw(show_num); $( "#canvas" ).on( 'click' , function (){ draw(show_num); }) $( ".btn" ).on( 'click' , function (){ var val = $( ".input-val" ).val().toLowerCase(); var num = show_num.join( "" ); if (val== '' ){ alert( '请输入验证码!' ); } else if (val == num){ alert( '提交成功!' ); $( ".input-val" ).val( '' ); draw(show_num); } else { alert( '验证码错误!请重新输入!' ); $( ".input-val" ).val( '' ); draw(show_num); } }) }) function draw(show_num) { var canvas_width=$( '#canvas' ).width(); var canvas_height=$( '#canvas' ).height(); var canvas = document.getElementById( "canvas" ); //获取到canvas的对象,演员 var context = canvas.getContext( "2d" ); //获取到canvas画图的环境,演员表演的舞台 canvas.width = canvas_width; canvas.height = canvas_height; var sCode = "A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0" ; var aCode = sCode.split( "," ); var aLength = aCode.length; //获取到数组的长度 for ( var i = 0; i <= 3; i++) { var j = Math.floor(Math.random() * aLength); //获取到随机的索引值 var deg = Math.random() * 30 * Math.PI / 180; //产生0~30之间的随机弧度 var txt = aCode[j]; //得到随机的一个内容 show_num[i] = txt.toLowerCase(); var x = 10 + i * 20; //文字在canvas上的x坐标 var y = 20 + Math.random() * 8; //文字在canvas上的y坐标 context.font = "bold 23px 微软雅黑" ;<br><br> context.translate(x, y); context.rotate(deg); context.fillStyle = randomColor(); context.fillText(txt, 0, 0); context.rotate(-deg); context.translate(-x, -y); } for ( var i = 0; i <= 5; i++) { //验证码上显示线条 context.strokeStyle = randomColor(); context.beginPath(); context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height); context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height); context.stroke(); } for ( var i = 0; i <= 30; i++) { //验证码上显示小点 context.strokeStyle = randomColor(); context.beginPath(); var x = Math.random() * canvas_width; var y = Math.random() * canvas_height; context.moveTo(x, y); context.lineTo(x + 1, y + 1); context.stroke(); } } function randomColor() { //得到随机的颜色值 var r = Math.floor(Math.random() * 256); var g = Math.floor(Math.random() * 256); var b = Math.floor(Math.random() * 256); return "rgb(" + r + "," + g + "," + b + ")" ; } </script> </body> </html> |
三.城市联动选择使用 mobileselect.js
参考地址:http://www.jq22.com/jquery-info14679
git地址:https://github.com/onlyhom/mobileSelect.js
1.地区数据也很重要,网上需要找,居然有人卖这些。擦!
2.由于是底层是使用layer弹窗的,已经有一层遮罩了,导致底层的白色部分,缓慢的变暗。这很难受。
在mobileselect.css里修改过渡效果,主要是对z-index的过渡引起的。他默认是0.4s
1 2 3 4 5 6 7 8 9 | .mobileSelect { position : relative ; z-index : 0 ; opacity: 0 ; visibility : hidden ; /* 以下两个为修改后的 */ -webkit-transition: opacity 0 s, z-index 0 s; transition: opacity 0 s, z-index 0 s; } |
3.遇到,无法联动选择的问题。原因是什么呢?原来是rem.js 让mobileselect.js失效了。为什么呢?为什么。rem这种响应式的js会影响到这些东西呢?我草?
解决方法如下:把mobileselect.css里的单位,全部改成rem单位。
美中不足的是,初始加载的时候,地区的都是对的,屏幕变化的时候,地区的排列就会错位。不过,禁止用户缩放屏幕就好了。哈哈。
同时自己写了一个rem.js ,如下
$(document).ready( size() ) // 窗口变化的时候,也运行重置函数 $(window).resize(function(){ size() } ) // 根字体大小的,重置函数 function size(){ var now=$(window).width() if(now>750){ $('html').css("font-size",100+'px') }else{ var font=(now/7.5) console.log(font) $('html').css("font-size",font+'px') } }
4.input的placeholder颜色默认灰色。选择完地区以后,要改变填入内颜色。

1 var mbs=new MobileSelect({ 2 trigger: '#triggercity', 3 title: '地区选择', 4 position: [pIndex, cIndex, 0], //初始化定位 打开时默认选中的哪个 如果不填默认为0 5 wheels: [ 6 {data:CityData} 7 ], 8 transitionEnd:function(indexArr, data){ 9 console.log(data); 10 console.log(1111); 11 12 // console.log(this) 13 }, 14 // 选择完成以后,修改颜色 15 callback:function(indexArr, data){ 16 $("#triggercity").css('color', '#000'); 17 } 18 });
4.国际电话区号选择
intl-tel-input
参考地址:http://www.jq22.com/jquery-info12917
git地址:直接在git搜就行了。不过说一下,这个插件有中文文档说明。可以百度,也可以自己翻译。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通