JS 事件练习

QQ拖拽及状态栏选择

 

HTML

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>QQ练习</title>
 5     <link href="css/main.css" rel="stylesheet" />
 6     <script src="js/drag.js"></script>
 7 </head>
 8 <body>
 9     <div class="loginPanel" id="loginPanel">
10          <div style="position: relative; z-index: 1;">
11             <div class="ui_boxyClose" id="ui_boxyClose"></div>
12         </div>
13         <div class="login_logo_webqq"></div>
14  
15         <div class="inputs">
16             <div class="sign-input"><span>帐 号:</span><span><input autocomplete="on" name="u" id="u" type="text" style="ime-mode: disabled" 
17             class="input01" tabindex="1" value="QQ号码或Email帐号" 
18             onFocus="if (value =='QQ号码或Email帐号'){value =''}" onBlur="if (value ==''){value='QQ号码或Email帐号';}" /></span></div>
19             <div class="sign-input"><span>密 码:</span><span><input name="p" id="p" maxlength="16" 
20             type="password" class="input01" tabindex="2" /></span></div>
21         </div>
22 
23         <div class="bottomDiv">
24             <div class="btn" style="float: left"></div>
25             <div>
26                 <div id="loginState" class="login-state-trigger login-state-trigger2 login-state" title="选择在线状态">
27                     <div id="loginStateShow" class="login-state-show online">状态</div>
28                     <div class="login-state-down"></div>
29                     <div class="login-state-txt" id="login2qq_state_txt">在线</div>
30                     <ul id="loginStatePanel" class="statePanel login-state" style="display: none">
31                         <li id="online" class="statePanel_li">
32                             <div class="stateSelect_icon online"></div>
33                             <div class="stateSelect_text">我在线上</div>
34                         </li>
35                         <li id="callme" class="statePanel_li">
36                             <div class="stateSelect_icon callme"></div>
37                             <div class="stateSelect_text">Q我吧</div>
38                         </li>
39                         <li id="away" class="statePanel_li">
40                             <div class="stateSelect_icon away"></div>
41                             <div class="stateSelect_text">离开</div>
42                         </li>
43                         <li id="busy" class="statePanel_li">
44                             <div class="stateSelect_icon busy"></div>
45                             <div class="stateSelect_text">忙碌</div>
46                         </li>
47                         <li id="silent" class="statePanel_li">
48                             <div class="stateSelect_icon silent"></div>
49                             <div class="stateSelect_text">请勿打扰</div>
50                         </li>
51                         <li id="hidden" class="statePanel_li">
52                             <div class="stateSelect_icon hidden"></div>
53                             <div class="stateSelect_text">隐身</div>
54                         </li>
55                     </ul>
56                 </div>
57             </div>
58         </div>
59     </div>
60 </body>
61 </html>
View Code

 

CSS

  1 .loginPanel {
  2     width: 380px;
  3     height: 247px;
  4     left: 400px;
  5     top: 120px;
  6     position: absolute;
  7     border: 1px solid #ccc;
  8     background: #f6f6f6;
  9     -moz-border-radius: 10px;
 10     -webkit-border-radius: 10px;
 11     border-radius: 10px;
 12     -moz-box-shadow: 0 0 8px #000;
 13     -webkit-box-shadow: 0 0 8px #000;
 14     box-shadow: 0 0 8px #000;
 15 }
 16 
 17 
 18 .login_logo_webqq {
 19     background: url('../images/login_window_logo.png') no-repeat -210px -0px;
 20     margin-left: 100px;
 21     margin-top: 10px;
 22     width: 200px;
 23     height: 44px;
 24     cursor: move;
 25 }
 26 
 27 
 28 .inputs {
 29     font: bold 15px arial;
 30     margin-left: 80px;
 31     margin-top: 30px;
 32 }
 33 
 34 .inputs .sign-input {
 35     padding-bottom: 20px;
 36 }
 37 
 38 .inputs .sign-input input {
 39     width: 170px;
 40     border: 1px #ccc solid;
 41     color: #868686;
 42     font-size: 16px;
 43     padding: 2px;
 44     -moz-border-radius: 10px;
 45     -webkit-border-radius: 10px;
 46     -khtml-border-radius: 10px;
 47     -border-radius: 10px;
 48     outline: none;
 49 }
 50 
 51 .btn {
 52     background: url("../images/login_btn.png") no-repeat -111px 0;
 53     width: 111px;
 54     height: 36px;
 55     border: 0;
 56     text-align: center;
 57     line-height: 20px;
 58     color: #0C4E7C;
 59     cursor: pointer;
 60     margin-left: 14px;
 61 }
 62 
 63 
 64 .login-state-trigger {
 65     cursor: pointer;
 66     display: block;
 67     float: left;
 68     height: 16px;
 69     overflow: hidden;
 70     width: 120px;
 71     margin: 4px 0 0 0;
 72 }
 73 
 74 .login-state-trigger2 {
 75     margin: 10px 0 0 20px;
 76 }
 77 
 78 .login-state-down {
 79     background: url("../images/ptlogin.png") no-repeat scroll 0 -22px transparent;
 80     float: left;
 81     height: 6px;
 82     margin-top: 5px;
 83     overflow: hidden;
 84     text-indent: -999em;
 85     width: 7px;
 86 }
 87 
 88 .login-state-show {
 89     float: left;
 90     height: 14px;
 91     overflow: hidden;
 92     text-indent: -999em;
 93     width: 14px;
 94     margin: 1px 4px 0 0;
 95 }
 96 
 97 .login-state-txt {
 98     float: left;
 99     margin-left: 5px;
100     font-size: 12px;
101     >line-height:18px!important;
102 }
103 
104 .login-state .callme {
105     background: url("../images/ptlogin.png") -72px 0 no-repeat;
106 }
107 
108 .login-state .online {
109     background: url("../images/ptlogin.png") 0 0 no-repeat;
110 }
111 
112 .login-state .away {
113     background: url("../images/ptlogin.png") -18px 0 no-repeat;
114 }
115 
116 .login-state .busy {
117     background: url("../images/ptlogin.png") -36px 0 no-repeat;
118 }
119 
120 .login-state .silent {
121     background: url("../images/ptlogin.png") -108px 0 no-repeat;
122 }
123 
124 .login-state .hidden {
125     background: url("../images/ptlogin.png") -54px 0 no-repeat;
126 }
127 
128 .statePanel {
129     display: none;
130     position: absolute;
131     right: 68px;
132     top: 193px;
133     z-index: 10;
134     margin: 0;
135     border-width: 1px;
136     border-style: solid;
137     border-color: #ccc #6a6a6a #666 #cdcdcd;
138     padding: 0;
139     width: 100px;
140     height: 133px;
141     overflow: hidden;
142     background: white;
143     font-size: 12px;
144     line-height: 1.5;
145 }
146 
147 .statePanel .statePanel_li {
148     display: block;
149     float: left;
150     margin: 0;
151     padding: 3px 0;
152     width: 100px;
153     height: 16px;
154     line-height: 16px;
155     overflow: hidden;
156     zoom: 1;
157     cursor: pointer;
158 }
159 
160 .stateSelect_icon {
161     float: left;
162     margin: 2px 0 0 5px;
163     width: 14px;
164     height: 14px;
165     overflow: hidden;
166 }
167 
168 .stateSelect_text {
169     margin: 0 0 0 22px;
170 }
171 
172 .bottomDiv {
173     margin-left: 70px;
174 }
175 
176 .ui_boxyClose{
177     width:28px;
178     height:28px;
179     position:absolute;
180     top:-10px;
181     right:-10px;
182     cursor:pointer;
183     background:url('../images/boxy_btn.png') no-repeat;z-index:1}.
184 
185 ie6_0 .ui_boxyClose{
186     background:0;
187     filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='boxy_btn.png',sizingMethod='scale')
188 }
View Code

 

JavaScript

  1 //封装一个getByClass函数,接收两个参数:第一个必需,第二个可选
  2 function getByClass(className, parentId) {
  3     var parent = parent ? document.getElementById(parentId) : document,
  4     eles = new Array(),
  5     elements = parent.getElementsByTagName("*");
  6     for(var i = 0, l = elements.length; i < l; i++) {
  7         if(elements[i].className == className) {
  8             eles.push(elements[i]);
  9         }
 10     }
 11     return eles;    //切记这个函数返回的是一个数组!!!
 12 };
 13 
 14 //在页面加载完毕之后调用drag函数
 15 window.onload = drag;
 16 
 17 //封装drag函数
 18 function drag() {
 19     //使用getByClass函数取得相应类名的某个元素;
 20     //千万记得,这个函数返回的是一个数组,要想取得某个元素,一定要通过方括号访问
 21     var title = getByClass("login_logo_webqq", "loginPanel")[0];
 22     //在鼠标在title区域按下时调用fnDown函数
 23     title.onmousedown = fnDown;
 24     //点击面板右上角按钮可关闭面板,实际上是将其隐藏
 25     var close = document.getElementById("ui_boxyClose");
 26     close.onclick = function() {
 27         //通过JS设置css属性值,其值必须是字符串
 28         document.getElementById("loginPanel").style.display = "none";
 29     };
 30     //点击loginState区域将loginStatePanel显示出来
 31     var loginState = document.getElementById("loginState");
 32     var loginStatePanel = document.getElementById("loginStatePanel");
 33     loginState.onclick = function(event) {
 34         loginStatePanel.style.display = "block";
 35         //阻止冒泡
 36         event = event || wind.event;
 37         if(event.stopPropagation) {
 38             event.stopPropagation();
 39         } else if(event.cancelBubble) {
 40             event.cancelBubble = true;
 41         };
 42     };
 43     //鼠标悬浮、离开和点击状态列表时
 44     var list = loginStatePanel.getElementsByTagName("li");
 45     for(var i = 0, l = list.length; i < l; i++) {
 46         //鼠标悬浮时,相应的元素改变背景颜色
 47         list[i].onmouseover = function() {
 48             this.style.backgroundColor = "#567";
 49         };
 50         //鼠标离开,恢复原来的颜色
 51         list[i].onmouseout = function() {
 52             this.style.backgroundColor = "";
 53         };
 54         //鼠标点击时,切换状态
 55         list[i].onclick = function(event) {
 56             //鼠标点击时,将loginStatePanel隐藏
 57             loginStatePanel.style.display = "none";
 58             //无效!!!
 59             //点击某一个元素,将loginStatePanel隐藏;
 60             //点击事件会冒泡,冒到祖先元素loginState,这个元素上已经绑定了一个点击事件,点击时将loginStatePanel显示出来;
 61             //最终的结果就是loginStatePanel先被隐藏后又被显示,所以隐藏没有效果。
 62             //阻止冒泡!!!
 63             event = event || wind.event;
 64             if(event.stopPropagation) {
 65                 event.stopPropagation();
 66             } else if(event.cancelBubble) {
 67                 event.cancelBubble = true;
 68             };
 69             //鼠标点击选择后,改变登录状态
 70             //改变显示的文字
 71             var state_txt = document.getElementById("login2qq_state_txt");
 72             var id = this.id;
 73             state_txt.innerHTML = getByClass("stateSelect_text", id)[0].innerHTML;
 74             //改变显示的图标
 75             var loginStateShow = document.getElementById('loginStateShow');
 76             loginStateShow.className = "";
 77             loginStateShow.className = "login-state-show " + id;
 78         }
 79     };
 80     //在页面的任何位置点击,隐藏loginStatePanel
 81     //如果单纯地添加这个事件,loginStatePanel将无法显示出来
 82     //原因在于:前面在loginState区域点击的时候,显示loginStatePanel;
 83     //冒泡到document上,又被隐藏了
 84     //所以需要在前面的事件上阻止冒泡
 85     document.onclick = function() {
 86         var loginStatePanel = document.getElementById("loginStatePanel");
 87         loginStatePanel.style.display = "none";
 88     };
 89 };
 90 
 91 //封装fnDown函数
 92 function fnDown(event) {
 93     event = event || window.event;
 94     var panel = document.getElementById("loginPanel");
 95     //在鼠标按下的那一刻,取得鼠标点击的那个点距离面板左上角的水平和垂直距离
 96     var disX = event.clientX - panel.offsetLeft;
 97     var disY = event.clientY - panel.offsetTop;
 98     //鼠标在页面中移动,持续触发document.onmousemove事件,核心思想是:鼠标到哪儿,面板到哪儿
 99     document.onmousemove = function(event) {
100         event = event || window.event;
101         //调用fnMove函数
102         fnMove(event, disX, disY);
103     };
104     //鼠标在页面中任何地方松开,都可以取消跟随效果;所以onmouseup应该挂载在document上,而不是title
105     document.onmouseup = function() {
106         document.onmousemove = null;
107         document.onmouseup = null;
108     }
109 }
110 
111 //封装fnMove函数
112 function fnMove(event, posX, posY) {
113     event = event || window.event;
114     //在一个新的函数作用域中,需要重新取得所需要的元素
115     var panel = document.getElementById("loginPanel");
116     //计算面板左上角距离页面左上角的动态距离
117     var l = event.clientX - posX;
118     var t = event.clientY - posY;
119     //计算面板能够移动的最大最小距离,防止移动到页面之外,出现滚动条
120     var window_width = document.documentElement.clientWidth || document.body.clientWidth;
121     var window_height = document.documentElement.clientHeight || document.body.clientHeight;
122     var max_width = window_width - panel.offsetWidth - 10;
123     var max_height = window_height - panel.offsetHeight;
124     //控制面板移动的最大最小距离
125     if(l < 0) {
126         l = 0;
127     } else if (l > max_width) {
128         l = max_width;
129     };
130     if(t < 0) {
131         t = 0;
132     } else if (t > max_height) {
133         t = max_height;
134     };
135     //最后的设置,让面板左上角距离页面左上角的距离随着鼠标的移动动态调整,达到拖拽效果
136     //切记,要带单位!
137     panel.style.left = l + "px";
138     panel.style.top = t + "px";
139 };
View Code

 

此demo有瑕疵!

通过alert()检测,id会随着点击不同的状态栏而相应变化,但是getByClass("stateSelect_text", id)[0].innerHTML永远都是“我在线上”,原因未知!

 

 

抽奖

 

HTML

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <title>抽奖</title>
 5         <meta charset="utf-8">
 6         <link type="text/css" rel="stylesheet" href="css/style.css">
 7         <script type="text/javascript" src="js/script.js"></script>
 8     </head>
 9     <body>
10         <div id="title" class="title">开始抽奖啦!</div>
11         <div class="btns">
12             <span id="start">开 始</span>
13             <span id="stop">停 止</span>
14         </div>
15     </body>
16 </html>
View Code

 

CSS

 1 * {
 2     margin:0;
 3     padding:0;
 4 }
 5 
 6 .title {
 7     width:400px;
 8     height:70px;
 9     margin:0 auto;
10     padding-top:30px;
11     text-align:center;
12     font-size:24px;
13     font-weight:bold;
14     color:#F00;
15 }
16 
17 .btns {
18     width:190px;
19     height:30px;
20     margin:0 auto;}
21 
22 .btns span {
23     display:block;       
24     float:left;
25     width:80px;
26     height:27px;
27     line-height:27px;
28     background:#036;
29     border:1px solid #eee;
30     border-radius:7px;
31     margin-right:10px;
32     color:#FFF;
33     text-align:center;
34     font-size:14px;
35     font-family:"微软雅黑";
36     cursor:pointer;
37 }
View Code

 

JavaScript

 1 //抽奖效果的核心思想:创建一个数组,随机取得数组中的某个元素。
 2 //创建一个数组备用
 3 var data = ["iPhone", "iPad", "iPad Mini", "iPod", "Thank you", "Thank you","Thank you", "Thank you"];
 4 var timer = null;
 5 var flag = 0;
 6 
 7 window.onload = lottery;
 8 
 9 function lottery() {
10     var start = document.getElementById("start");
11     var stop = document.getElementById("stop");
12     //鼠标事件
13     start.onclick = playStart;
14     stop.onclick = playStop;
15     //键盘事件
16     document.onkeyup = function(event) {
17         event = event || window.event;
18         //检测是否按了回车键
19         if(event.keyCode === 13) {
20             //如果flag为0,则表示没有按过回车键,开始抽奖,然后将flag赋值为1
21             //为了达到鼠标与键盘的完美配合效果,将flag赋值分别写在playStart和playStop函数里
22             if(flag === 0) {
23                 playStart();
24                 //flag = 1;
25             } else if(flag ===1) {
26                 //如果flag为1,则表示正在抽奖,停止抽奖,将flag重置为0,以便开始下次抽奖
27                 playStop();
28                 //flag = 0;
29             }
30         };
31     };
32 };
33 
34 //封装playStart函数
35 function playStart() {
36     var title = document.getElementById("title");
37     //每次点击只执行一个定时器,关掉之前的定时器
38     clearInterval(timer);
39     //生成新的定时器
40     timer = setInterval(function() {
41         //每隔一段时间生成一个随机数,所以变量random必须写在setInterval内部
42         var random = Math.floor(Math.random() * 8);
43         title.innerHTML = data[random];
44     }, 50);
45     //改变按钮的背景颜色
46     var start = document.getElementById("start");
47     start.style.backgroundColor = "#999";
48     flag = 1;
49 };
50 //封装playStop函数
51 function playStop() {
52     //清除定时器
53     clearInterval(timer);
54     //恢复"开始"按钮的颜色
55     var start = document.getElementById("start");
56     start.style.backgroundColor = "#036";
57     flag = 0;
58 };
View Code

 

 

下拉菜单

 

HTML

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>下拉菜单</title>
 6         <link rel="stylesheet" href="style.css">
 7     </head>
 8     <body>
 9         <div id="divselect">
10             <cite>请选择分类</cite>
11             <ul>
12                 <li id="li"><a href="javascript:;" selectid="1">ASP开发</a></li>
13                 <li><a href="javascript:;" selectid="2">.NET开发</a></li>
14                 <li><a href="javascript:;" selectid="3">PHP开发</a></li>
15                 <li><a href="javascript:;" selectid="4">Javascript开发</a></li>
16                 <li><a href="javascript:;" selectid="5">Java特效</a></li>
17             </ul>
18         </div>
19     <script type="text/javascript" src="script.js"></script>
20     </body>
21 </html>
View Code

 

CSS

 1 body,ul,li {
 2     margin:0; 
 3     padding:0; 
 4     font-size:13px;
 5 }
 6 
 7 ul,li {
 8     list-style:none;
 9 }
10 
11 #divselect {
12     width:186px;
13      margin:80px auto; 
14      position:relative; 
15      z-index:10000;
16 }
17 
18 #divselect cite {
19     width:150px; 
20     height:24px;
21     line-height:24px; 
22     display:block; 
23     color:#807a62; 
24     cursor:pointer;
25     font-style:normal;
26     padding-left:4px; 
27     padding-right:30px; 
28     border:1px solid #333333; 
29     background:url(xjt.png) no-repeat right center;
30 }
31 
32 #divselect ul {
33     width:184px;
34     border:1px solid #333333;
35     background-color:#ffffff; 
36     position:absolute; 
37     z-index:20000; 
38     margin-top:-1px; 
39     display:none;
40 }
41 
42 #divselect ul li {
43     height:24px; 
44     line-height:24px;
45 }
46 
47 #divselect ul li a {
48     display:block; 
49     height:24px; 
50     color:#333333; 
51     text-decoration:none; 
52     padding-left:10px; 
53     padding-right:10px;
54 }
View Code

 

JavaScript

 1 window.onload = draw;
 2 
 3 function draw() {
 4     var select = document.getElementById("divselect");
 5     select.onclick = drawDown;
 6     document.onclick = function() {
 7         //关闭下拉菜单
 8         var ulist = document.getElementsByTagName("ul")[0];
 9         ulist.style.display = "none";
10         //清除背景颜色
11         var list = ulist.getElementsByTagName("a");
12         for(var i = 0, l = list.length; i < l; i++) {
13             list[i].style.backgroundColor = "";
14         }
15     };
16 };
17 
18 function drawDown(event) {
19     var ulist = document.getElementsByTagName("ul")[0];
20     ulist.style.display = "block";
21             event = event || window.event;
22             if(event.stopPropagation) {
23                 event.stopPropagation();
24             } else if(event.cancelBubble) {
25                 event.cancelBubble = true;
26             }
27     var list = ulist.getElementsByTagName("a");
28 
29     //鼠标事件
30     for(var i = 0, l = list.length; i < l; i++) {
31         list[i].onmouseover = function() {
32         //清除所有键盘事件导致的背景颜色
33         for(var i = 0, l = list.length; i < l; i++) {
34             list[i].style.backgroundColor = "";
35         }
36             this.style.backgroundColor = "#567";
37         };
38         list[i].onmouseout = function() {
39             this.style.backgroundColor = "";
40         };
41         list[i].onclick = function(event) {
42             var cite = document.getElementsByTagName("cite")[0];
43             cite.innerHTML = this.innerHTML;
44             ulist.style.display = "none";
45             event = event || window.event;
46             if(event.stopPropagation) {
47                 event.stopPropagation();
48             } else if(event.cancelBubble) {
49                 event.cancelBubble = true;
50             }
51         };
52     };
53 
54     //键盘事件
55     //声明并初始化一个变量index,赋值为-1
56     var index = -1;
57     document.onkeyup = function(event) {
58         event = event || window.event;
59         //清除所有鼠标事件导致的背景颜色
60         for(var i = 0, l = list.length; i < l; i++) {
61             list[i].style.backgroundColor = "";
62         }
63         //如果按下的是向下方向键
64         if(event.keyCode === 40) {
65             //每按键一次,index递增
66             index++;
67             //控制index的大小范围
68             //如果index大于等于数组的长度,则将其重置为0,这时候就会选中数组的第一项,此时应该恢复数组最后一项的背景颜色
69             if(index >= l) {
70                 index = 0;
71                 list[l-1].style.backgroundColor = "";
72             }
73             //第一次按向上方向键时,index从-1变成0,以index为索引号,改变键盘选中的每一项的背景颜色
74             list[index].style.backgroundColor = "#567";
75             //恢复上一项的背景颜色
76             list[index-1].style.backgroundColor = "";
77         }
78         //如果按下的是向上方向键,逻辑同上
79         if(event.keyCode ===38) {
80             index--;
81             if(index < 0) {
82                 index = l -1;
83                 list[0].style.backgroundColor = "";
84             }
85             list[index].style.backgroundColor = "#567";
86             list[index+1].style.backgroundColor = "";
87         }
88         //如果按下的是回车键
89         if(event.keyCode === 13) {
90             var cite = document.getElementsByTagName("cite")[0];
91             cite.innerHTML = list[index].innerHTML;
92             ulist.style.display = "none";
93         };
94     }
95 };
View Code

 

转载于:https://www.cnblogs.com/cc156676/p/5746925.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo和Spring Cloud微服务架构对比

微服务架构是互联网很热门的话题&#xff0c;是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。目录 微服务主要的优势 降低复杂度 可独立部署 容错 扩展 核心部件 总体架构 Dubbo …

《ABP Framework 极速开发》 - 教程首发

‍写在发布之前强烈建议每一位小伙伴都应该好好看看 ABP Framework 官方文档&#xff0c;可能有很多的小伙伴跟我刚开始的感觉一样“一看文档深似海”&#xff0c;看完文档之后&#xff0c;想要上手却找不着头绪。本套教程写作的目的之一是为初学者提供一条相对简洁的快速上手路…

智能家居系统结构标准化

版权申明&#xff1a;本文为博主窗户(Colin Cai)原创&#xff0c;欢迎转帖。如要转贴&#xff0c;必须注明原文网址http://www.cnblogs.com/Colin-Cai/p/8490423.html作者&#xff1a;窗户QQ&#xff1a;6679072E-mail&#xff1a;6679072qq.com0 引 言 智能家居是指利用先进的…

洛谷 P3391 文艺平衡树

题目描述 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列&#xff0c;其中需要提供以下操作&#xff1a;翻转一个区间&#xff0c;例如原有序序列是5 4 3 2 1&#xff0c;翻转区间是[2,4]的话&#xff0c;结果是5 2 3 4 1 --by洛谷…

JSONObject中optString和getString等的区别

2019独角兽企业重金招聘Python工程师标准>>> 同事在看到我写的解析数据代码后&#xff0c;告诉我optString比getString好用&#xff0c;optString不会抛异常&#xff0c;而getString会抛异常&#xff0c;自己是将信将疑&#xff0c;就说&#xff0c;回去后我查查资料…

Lombok插件安装(IDEA)、配置jar包、使用

点击进入Lombok官网下载Lombok jar包 使用Lombok可能需要注意的地方 &#xff08;1&#xff09;当你的IDE是Idea时&#xff0c;要注意你的Idea是支持Lombok的&#xff0c;如果不支持请更换高版本尝试&#xff08;这里采用2018 3.3&#xff09;。 &#xff08;2&#xff09;在使…

Blazor University (40)JavaScript 互操作 —— 传递 HTML 元素引用

原文链接&#xff1a;https://blazor-university.com/javascript-interop/calling-javascript-from-dotnet/passing-html-element-references/传递 HTML 元素引用源代码[1]在编写 Blazor 应用程序时&#xff0c;不鼓励对文档对象模型 (DOM) 进行操作&#xff0c;因为它可能会干…

RabbitMQ+PHP 教程六(RPC)

(using php-amqplib) 前提必读 本教程假设RabbitMQ是安装在标准端口上运行&#xff08;5672&#xff09;。如果您使用不同的主机、端口或凭据&#xff0c;则连接设置需要调整。 如果您在本教程中遇到困难&#xff0c;可以通过邮件列表与我们联系。 开始 在第二个教程中&#xf…

TKMybatis 介绍和使用

目录 一、什么是 TKMybatis 二、TKMybatis 使用 2.1 Springboot 项目中加入依赖 2.2 使用讲解 2.2.1 实体类中使用 2.2.2 dao中使用 2.2.3 Service 层中使用 2.3 实际案例 2.3.1 dao 层使用 2.3.2 service 层使用 一、什么是 TKMybatis TKMybatis 是基于 Mybatis 框…

WinForm(三)揭开可视化控件的面纱

WinForm所见即所得的UI设计框架&#xff0c;开发效率确实有所提升&#xff0c;同时降低了编程门槛&#xff0c;让WinForm更普及。拖拖拽拽就能设计出一个界面&#xff0c;那么我们拖拽的这些东西是什么&#xff1f;它们是什么原理&#xff1f;。WinForm我觉得很好的一点是&…

RestTemplate 详解

在项目中&#xff0c;当我们需要远程调用一个 HTTP 接口时&#xff0c;我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类。Spring 官网对它的介绍如下&#xff1a; RestTemplate: The original Spring REST client with a synchronous, template met…

初识Spark2.0之Spark SQL

内存计算平台Spark在今年6月份的时候正式发布了spark2.0&#xff0c;相比上一版本的spark1.6版本&#xff0c;在内存优化&#xff0c;数据组织&#xff0c;流计算等方面都做出了较大的改变&#xff0c;同时更加注重基于DataFrame数据组织的MLlib&#xff0c;更加注重机器学习整…

ABP详细教程——模块类

概述模块化是ABP vNext的最大亮点&#xff0c;也是ABP vNext框架的核心&#xff0c;而模块类是ABP vNext框架模块化的核心要素。这一章节&#xff0c;我就从模块类的用法、运行机制、源代码等层面&#xff0c;带大家详细了解ABP vNext的模块类。用法在ABP的约定中&#xff0c;每…

[转]Eureka工作原理

目录 Eureka 工作原理 Eureka 核心概念 自我保护机制 Eureka 集群原理 Eurka 工作流程 总结 Eureka 工作原理 上节内容为大家介绍了&#xff0c;注册中心 Eureka 产品的使用&#xff0c;以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka&…

重谈联想5G编码投票事件

此前&#xff0c;司马南谈了联想好几个问题&#xff0c;其中最尖锐的要属国有资产流失&#xff0c;这是联想管理层无法回避的死穴。不过&#xff0c;司马南批判联想5G投票背刺H公司&#xff0c;这基本就是造谣了。当年&#xff0c;媒体把编码投票炒作的很厉害&#xff0c;抨击联…

JStorm2.1.1集群的安装和使用

为什么80%的码农都做不了架构师&#xff1f;>>> JStorm2.1.1集群的安装和使用 Storm是一个免费开源、分布式、高容错的实时计算系统&#xff0c;而JStorm是阿里巴巴开源的基于Storm采用Java重写的一套分布式实时流计算框架&#xff0c;在性能和支持的集群规模上做了…

Hystrix 原理

Hystrix是什么&#xff1f; Hystrix是Netflix开源库&#xff0c;这是一个针对分布式系统的延迟和容错库。 Hystrix 供分布式系统使用&#xff0c;提供延迟和容错功能&#xff0c;隔离远程系统、访问和第三方程序库的访问点&#xff0c;防止级联失败&#xff0c;保证复杂的分布…

「深度」无人机实名制政策特稿|市场看好、资本关注,“反黑飞”正在崛起

从政策和需求来看&#xff0c;“反黑飞”越来越重要&#xff0c;市场也正在不断崛起。 对于大多数人来说&#xff0c;今天是最适合明目张胆“装嫩”的六一儿童节。不过&#xff0c;在无人机厂商和无人机玩家的眼里&#xff0c;今天是无人机实名制政策正式实施的日子。 近年来&…

在navicat中新建数据库

前言&#xff1a; 在本地新建一个名为editor的数据库&#xff1b; 过程&#xff1a; 1.&#xff1b; 2.选择&#xff1a;utf8mb4 -- UTF-8 Unicode字符集&#xff0c;原因在于&#xff1a;utf8mb4兼容utf8&#xff0c;且比utf8能表示更多的字符。&#xff0c;而且它支持表情符号…

MASA Stack 第三期社区例会

MASA Blazor 0.5.0发版内容功能Autocomplete&#xff1a;支持通过设置AutoSelectFirst参数开启自动选择第一项的功能&#xff0c;支持CacheItems参数&#xff0c;增强使用上下键的用户体验。BottomNavigation&#xff1a;&#xff1a;一个替代侧边栏的新组件。它主要用于移动应…