整理中。。。

1、js获取页面及元素高度、宽度

其他参考文献:http://www.open-open.com/lib/view/open1420120422531.html

js:

网页可见区域宽: document.body.clientWidth;(不含滚动条)
网页可见区域高: document.body.clientHeight;(不含滚动条)
网页可见区域宽: document.body.offsetWidth;(包括边线的宽);
网页可见区域高: document.body.offsetHeight;(包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高(ff):document.body.scrollTop;
网页被卷去的高(ie): document.documentElement.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
某个元素的宽度: obj.offsetWidth;
某个元素的高度: obj.offsetHeight;
某个元素的上边界到body最顶部的距离: obj.offsetTop;(在元素的包含元素不含滚动条的情况下)
某个元素的左边界到body最左边的距离: obj.offsetLeft;(在元素的包含元素不含滚动条的情况下)
返回当前元素的上边界到它的包含元素的上边界的偏移量: obj.offsetTop;(在元素的包含元素含滚动条的情况下)
返回当前元素的左边界到它的包含元素的左边界的偏移量: obj.offsetLeft;(在元素的包含元素含滚动条的情况下)

屏幕分辨率的高: window.screen.height
屏幕分辨率的宽: window.screen.width
屏幕可用工作区高度: window.screen.availHeight
屏幕可用工作区宽度: window.screen.availWidth

HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth
scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标
event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量

jquery:

获取浏览器显示区域(可视区域)的高度 : $(window).height();
获取浏览器显示区域(可视区域)的宽度 : $(window).width();
获取页面的文档高度:$(document).height();
获取页面的文档宽度 :$(document).width();
浏览器当前窗口文档body的高度: $(document.body).height();
浏览器当前窗口文档body的宽度: $(document.body).width();
获取滚动条到顶部的垂直高度 (即网页被卷上去的高度) :$(document).scrollTop();
获取滚动条到左边的垂直宽度 :$(document).scrollLeft();
获取或设置元素的宽度:$(obj).width();
获取或设置元素的高度:$(obj).height();

获取或设置元素的宽度:$(obj).innerWidth(); (height + padding)
获取或设置元素的高度:$(obj).innerHeight(); (height + padding)

获取或设置元素的宽度:$(obj).outerWidth(); (height + padding + border)
获取或设置元素的高度:$(obj).outerHeight(); (height + padding + border)

获取或设置元素的宽度:$(obj).outerWidth(true); (height + padding + border + margin)
获取或设置元素的高度:$(obj).outerHeight(true); (height + padding + border + margin)
某个元素的上边界到body最顶部的距离:obj.offset().top;(在元素的包含元素不含滚动条的情况下)
某个元素的左边界到body最左边的距离:obj.offset().left;(在元素的包含元素不含滚动条的情况下)
返回当前元素的上边界到它的包含元素的上边界的偏移量:obj.offset().top(在元素的包含元素含滚动条的情况下)
返回当前元素的左边界到它的包含元素的左边界的偏移量:obj.offset().left(在元素的包含元素含滚动条的情况下)

2、选中改变样式,其他默认样式
  1.  
  1. <dl class="use_class">
    <dd>个人</dd>
    <dd>机构</dd>
    </dl>
  1. <script type="text/javascript" src="../js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
    // 用户类别选择,个人、机构
    $(document).ready(function(){
    $("dd").click(function(){
    $(this).css("background","#46b0d5").siblings().css("background","#ccc");
    });
  1. </script>
3、JS判断浏览器是否支持某一个CSS3属性的方法

css3表现冲击最大的就是动画了,因此很有必要去事先判断浏览器是否支持,写CSS3动画库就只有部分浏览器支持

  1. function supportCss3(style) {
  2. var prefix = ['webkit', 'Moz', 'ms', 'o'],
  3. i,
  4. humpString = [],
  5. htmlStyle = document.documentElement.style,
  6. _toHumb = function (string) {
  7. return string.replace(/-(\w)/g, function ($0, $1) {
  8. return $1.toUpperCase();
  9. });
  10. };
  11.  
  12. for (i in prefix)
  13. humpString.push(_toHumb(prefix[i] + '-' + style));
  14.  
  15. humpString.push(_toHumb(style));
  16.  
  17. for (i in humpString)
  18. if (humpString[i] in htmlStyle) return true;
  19.  
  20. return false;
  21. }
    alert(supportCss3('animation-play-state'));//使用方法
4、JS实现-DIV自动居中代码
  1. window.onload = function(){
  2. function box(){
  3. //获取DIV为‘box’的盒子
  4. var oBox = document.getElementById('box');
  5. //获取元素自身的宽度
  6. var L1 = oBox.offsetWidth;
  7. //获取元素自身的高度
  8. var H1 = oBox.offsetHeight;
  9. //获取实际页面的left值。(页面宽度减去元素自身宽度/2)
  10. var Left = (document.documentElement.clientWidth-L1)/2;
  11. //获取实际页面的top值。(页面宽度减去元素自身高度/2)
  12. var top = (document.documentElement.clientHeight-H1)/2;
  13. oBox.style.left = Left+'px';
  14. oBox.style.top = top+'px';
  15. }
  16. box();
  17. //当浏览器页面发生改变时,DIV随着页面的改变居中。
  18. window.onresize = function(){
  19. box();
  20. }
  21. }
5、JS自动刷新页面

Javascript刷新页面的几种方法:

  1. history.go(0)
  2. location.reload()
  3. location=location
  4. location.assign(location)
  5. document.execCommand('Refresh')
  6. window.navigate(location)
  7. location.replace(location)
  8. document.URL=location.href

例如:

  1. function myrefresh()
  2. {
  3. window.location.reload();
  4. }
  5. setTimeout('myrefresh()',1000); //指定1秒刷新一次
6、点击空白关闭弹窗的js写法推荐?
  1. $(document).mouseup(function(e){
  2. var _con = $(' 目标区域 '); // 设置目标区域
  3. if(!_con.is(e.target) && _con.has(e.target).length === 0){ // Mark 1
  4. some code... // 功能代码
  5. }
  6. });
  7. /* Mark 1 的原理:
  8. 判断点击事件发生在区域外的条件是:
  9. 1. 点击事件的对象不是目标区域本身
  10. 2. 事件对象同时也不是目标区域的子元素
  11. */
7、js写一个弹出窗
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>js实现一个弹出框</title>
  6. <style type="text/css">
  7. /*预先写好弹出窗的样式*/
  8. #menu{height: 900px;}
  9. #close{
  10. width:30px;
  11. height:30px;
  12. cursor:pointer;
  13. position:absolute;
  14. right:5px;
  15. top:5px;
  16. text-indent:-999em;
  17. background-color:blue;
  18. }
  19. #mask{
  20. background-color:pink;
  21. opacity:0.5;
  22. filter: alpha(opacity=50);
  23. position:absolute;
  24. left:0;
  25. top:0;
  26. z-index:1;
  27. }
  28. #login{
  29. position:fixed;
  30. z-index:2;
  31. }
  32. .loginCon{
  33. position:relative;
  34. width:670px;
  35. height:380px;
  36. /*background:url(img/loginBg.png) #2A2C2E center center no-repeat;*/
  37. background-color: #ccc;
  38. }
  39. </style>
  40. <script>
  41. function openNew(){
  42. //获取页面的高度和宽度
  43. var sWidth=document.body.scrollWidth;
  44. var sHeight=document.body.scrollHeight;
  45.  
  46. //获取页面的可视区域高度和宽度
  47. var wHeight=document.documentElement.clientHeight;
  48.  
  49. var oMask=document.createElement("div");
  50. oMask.id="mask";
  51. oMask.style.height=sHeight+"px";
  52. oMask.style.width=sWidth+"px";
  53. document.body.appendChild(oMask);
  54. var oLogin=document.createElement("div");
  55. oLogin.id="login";
  56. oLogin.innerHTML="<div class='loginCon'><div id='close'>关闭</div></div>";
  57. document.body.appendChild(oLogin);
  58.  
  59. //获取登陆框的宽和高
  60. var dHeight=oLogin.offsetHeight;
  61. var dWidth=oLogin.offsetWidth;
  62. //设置登陆框的left和top
  63. oLogin.style.left=sWidth/2-dWidth/2+"px";
  64. oLogin.style.top=wHeight/2-dHeight/2+"px";
  65. //点击关闭按钮
  66. var oClose=document.getElementById("close");
  67.  
  68. //点击登陆框以外的区域也可以关闭登陆框
  69. oClose.onclick=oMask.onclick=function(){
  70. document.body.removeChild(oLogin);
  71. document.body.removeChild(oMask);
  72. };
  73. };
  74.  
  75. window.onload=function(){
  76. var oBtn=document.getElementById("btnLogin");
  77. //点击登录按钮
  78. oBtn.onclick=function(){
  79. openNew();
  80. return false;
  81. }
  82.  
  83. }
  84. </script>
  85.  
  86. </head>
  87. <body>
  88. <div id="menu">
  89. <div id="login-area">
  90. <button id="btnLogin">登录</button>
  91. </div>
  92. </div>
  93. </body>
  94. </html>
8、限制显示字数
  8.1非文本框字数显示限制
  1. var cname = document.getElementsByClassName('text-slick');
  2. for (var i = 0; i < cname.length; i++) {      
  3. var nowLength = cname[i].innerHTML.length;
  4. if (nowLength > wordLength) {
  5. cname[i].innerHTML = cname[i].innerHTML.substr(0,wordLength) + '...';
           }  
         } 
  8.2文本框字数显示限制
HTML代码:
其中:class="ui-text" 、class="ui-input"、data-num="48"、class="ui-textTips",是必不可少的。
  1. <div class="ui-text">
  2.  
  3. <textarea name="text" id="text" cols="" rows="" placeholder="" maxlength="48" class="ui-input" data-num="48"></textarea>
  4. <div class="ui-textTips">还可以输入<em>48</em>个字</div>
  5. </div>

JS代码:

  1. function tipsText(){
  2. $('.ui-text').each(function(){
  3. var _this = $(this);
  4. var elm = _this.find('.ui-input');
  5. var txtElm = _this.find('.ui-textTips');
  6. var maxNum = _this.find('.ui-input').attr('data-num') || 500;
  7. console.log($.support.leadingWhitespace);
  8. if(!$.support.leadingWhitespace){
  9. _this.find('textarea').on('propertychange',function(){
  10. changeNum(elm,txtElm,maxNum);
  11. });
  12. _this.find('input').on('propertychange',function(){
  13. changeNum(elm,txtElm,maxNum);
  14. });
  15. } else {
  16. _this.on('input',function(){
  17. changeNum(elm,txtElm,maxNum);
  18. });
  19. }
  20. });
  21. }
  22.  
  23. tipsText();
  24.  
  25. //获取文字输出字数,可以遍历使用
  26. //txtElm动态改变的dom,maxNum获取data-num值默认为120个字,ps数字为最大字数*2
  27. function changeNum(elm,txtElm,maxNum) {
  28. //汉字的个数
  29. //var str = (elm.val().replace(/\w/g, "")).length;
  30. //非汉字的个数
  31. //var abcnum = elm.val().length - str;
  32. total = elm.val().length;
  33. if(total <= maxNum ){
  34. texts = maxNum - total;
  35. txtElm.html('还可以输入<em>'+texts+'</em>个字');
  36. }else{
  37. texts = total - maxNum ;
  38. txtElm.html('已超出<em class="error">'+texts+'</em>个字');
  39. }
  40. return ;
  41. }

文本框字数显示限制 方法二

  1. <html lang='en'>
  2. <head>
  3. <meta charset='utf-8'/>
  4. <title>demo</title>
  5. <style type="text/css">
  6. .sr { width: 300px; height: 300px; padding: 10px; outline: none; border: 1px solid #D4D4D4; background-color: #F3F3F3; }
  7. </style>
  8.  
  9. </head>
  10. <body>
  11.  
  12. <!-- onkeyUp="textLimitCheck(this, 20);" -->
  13. <textarea name="sca" class="sr" cols=45 rows=10 id="praiseName"></textarea>
  14. <br>
  15. <font color=#666666>限 6 个字符 已输入 <font color="#CC0000"><span id="info_limit">0</span></font> 个字</font>
  16.  
  17. <script>
  18. /* 拼音输入法的时候字还没打完就被限制了。
  19. function textLimitCheck(thisArea, maxLength){
  20. if (thisArea.value.length > maxLength){
  21. alert(maxLength + ' 个字限制. \r超出的将自动去除.');
  22. thisArea.value = thisArea.value.substring(0, 20);
  23. thisArea.focus(); } /*回写span的值,当前填写文字的数量*/
  24. /*messageCount.innerText = thisArea.value.length;
  25. }*/
  26.  
  27. //控制字数
  28. var lim = new limit();
  29. lim.txtNote = document.getElementById("praiseName");
  30. lim.txtLimit = document.getElementById("info_limit");
  31. lim.limitCount = 6;
  32. lim.init();
  33. function limit(){
  34. var txtNote;//文本框
  35. var txtLimit;//提示字数的input
  36. var limitCount;//限制的字数
  37. this.init = function(){
  38. txtNote = this.txtNote;
  39. txtLimit = this.txtLimit;
  40. limitCount = this.limitCount;
  41. txtNote.maxLength = limitCount;
  42. txtNote.onkeydown = function(){txtLimit.innerText = txtNote.value.length;};
  43. txtNote.onkeyup = function(){txtLimit.innerText = txtNote.value.length;};
  44. }
  45. }
  46. // 输入法输入的时候,显示超出设置字数时进行截屏或者其他操作,操作完后,不会自动截取文字 所以需要输入框失去焦点时再截取一次
  47.  
  48. $('#praiseName').blur(function() {
  49. $this = $(this);
  50. var val = $this.val();
  51. var length = $this.val().length;
  52. var lengthNum = 30;//设置限制的字数
  53.  
  54. //超过指定字数便截取
  55. if (length > lengthNum) {
  56. var text = $this.val().substring(0, lengthNum);
  57. $this.val(text);
  58. $('#info_limit').text(lengthNum);
  59. };
  60. });
  61. //也可以直接在dom上加onblur事件οnblur="onsubstring();
  62. //function onsubstring(){
  63. // var txtNote = document.getElementById("praiseName");
  64. // var txtLimit = document.getElementById("info_limit");
  65. // var limitCount = 6;
  66. // if (txtNote.value.length > limitCount) {
  67. // var text = txtNote.value.substring(0, limitCount);
  68. // txtNote.value = text;
  69. // txtLimit.innerText = limitCount;
  70. // };
  71. //};
  72.  
  73. //由于需要验证去除空格,我用到了jquery的 $.trim() 方法,去除输入的文字前后空格,基本满足要求
  74. $('#praiseName').blur(function() {
  75. $this = $(this);
  76. var val = $.trim($this.val());
  77. $this.val(val);//去除空格后,重新赋值
  78. var length = $this.val().length;
  79. var lengthNum = 8;//设置限制的字数
  80. //超过指定字数便截取
  81. if (length > lengthNum) {
  82. var text = $this.val().substring(0, lengthNum);
  83. $this.val(text);
  84. $('#info_limit').text(lengthNum);
  85. }else{
  86. $('#info_limit').text(length);
  87. };
  88. });
  89.  
  90. //若需要多次使用,可采用下列修改
  91. $("#XX").blur(function(){
  92. blurLength($(this), 20, $('#XX'));
  93. });
  94. $("#XX").blur(function(){
  95. blurLength($(this), 90, $('#XX'));
  96. });
  97.  
  98. //验证输入框字符串
  99. function blurLength(t, n, l){
  100. var val = $.trim($(t).val());
  101. $(t).val(val);//去除空格后,重新赋值
  102. var length = $(t).val().length;
  103. var lengthNum = n;//设置限制的字数
  104. //超过指定字数便截取
  105. if (length > lengthNum) {
  106. var text = $(t).val().substring(0, lengthNum);
  107. $(t).val(text);
  108. $(l).text(lengthNum);
  109. }else{
  110. $(l).text(length);
  111. };
  112. }
  113. //其他要求 需要在输入时判断只能输入数字和小数点。并且小数点后只保留两位
  114. var lims = new limit();
  115. lims.txtNote = document.getElementById("diningPrice");
  116. lims.txtLimit = document.getElementById("diningPriceNum");
  117. lims.limitCount = 5;
  118. lims.mark = 1;
  119. lims.init();
  120. function limit(){
  121. var txtNote;//文本框
  122. var txtLimit;//提示字数的input
  123. var limitCount;//限制的字数
  124. var mark;//判断标识
  125. this.init = function(){
  126. txtNote = this.txtNote;
  127. txtLimit = this.txtLimit;
  128. limitCount = this.limitCount;
  129. mark = this.mark;
  130. txtNote.maxLength = limitCount;
  131. txtNote.onkeydown = function(){
  132. if (mark == 1) {
  133. clearNoNum(txtNote);
  134. }
  135. txtLimit.innerText = txtNote.value.length;
  136. };
  137. txtNote.onkeyup = function(){
  138. if (mark == 1) {
  139. clearNoNum(txtNote);
  140. }
  141. txtLimit.innerText = txtNote.value.length;
  142. };
  143. }
  144. }
  145.  
  146. //过滤除数字和点外的其他输入内容
  147. function clearNoNum(obj){
  148. obj.value = obj.value.replace(/[^\d.]/g,""); //清除“数字”和“.”以外的字符
  149. obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的
  150. obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
  151. obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');//只能输入两个小数
  152. if(obj.value.indexOf(".")< 0 && obj.value !=""){//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
  153. obj.value= parseFloat(obj.value);
  154. }
  155. }
  156. //其他要求 限制只能输入中文、英文和数字
  157. function limit(){
  158. var txtNote;//文本框
  159. var txtLimit;//提示字数的input
  160. var limitCount;//限制的字数
  161. this.init = function(){
  162. txtNote = this.txtNote;
  163. txtLimit = this.txtLimit;
  164. limitCount = this.limitCount;
  165. txtNote.maxLength = limitCount;
  166. txtNote.onkeydown = function(){
  167. txtNote.value = txtNote.value.replace(/[^\u4E00-\u9FA5A-Za-z0-9]/g,'');
  168. txtLimit.innerText = txtNote.value.length;
  169. };
  170. txtNote.onkeyup = function(){
  171. txtNote.value = txtNote.value.replace(/[^\u4E00-\u9FA5A-Za-z0-9]/g,'');
  172. txtLimit.innerText = txtNote.value.length;
  173. };
  174. }
  175. }
  176.  
  177. </script>
  178. </body>
  179. </html>

js效果 整理的更多相关文章

  1. 《JavaScript实用效果整理》系列分享专栏

    整理一些使用的JavaScript效果,在Web开发中遇到的比较好的动态效果,都收藏在这里,对以后的网站开发增加不少的色彩 <JavaScript实用效果整理>已整理成PDF文档,点击可直 ...

  2. 类js效果

    类似js效果,点击看看  代码 onclick="return confirm('您确定要看看吗?')" 放入a标签里面

  3. m.jd.com首页中的js效果

    m.jd.com中的部分js效果 昨天把m.jd.com的首页布局写好了,今天写一下首页中部分js效果.头部背景色透明度的改变,焦点图轮播,京东快报的小轮播,以及秒杀倒计时.这里html,css样式就 ...

  4. 常用js方法整理common.js

    项目中常用js方法整理成了common.js var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data ...

  5. Tab选项卡切换卡JS效果

    <script type="text/javascript"> /* tab切换选项卡js效果 writed by *** 2010.08.13 1.currentid ...

  6. 项目中常用js方法整理common.js

    抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...

  7. JS效果的步骤

    一.写JS效果的步骤 1.先实现布局 (XHTML+CSS2) 2.实现原理 (1)希望把某个元素移除你的视线: a.  display:none;         显示为无,不占据空间 b.  vi ...

  8. Github上html页面(包括CSS样式和JS效果)如何显示出来

    在看Github上项目时,发现有的html页面效果能很好的展现出来,而有的则不能.对这个问题很好奇,因此研究了一下,最终做到了将页面展示出来的目的.下面以我的Github的开源项目bootstrap- ...

  9. WebView 实现JS效果和a标签的点击事件

    目前很多android app都可以显示web页面的界面,嵌入式开发,这个界面一般都是WebView这个控件加载出来的,学习该控件可以为你的app开发提升扩展性. 先说下WebView的一些优点: 可 ...

随机推荐

  1. 【开发者portal在线开发插件系列三】字符串 及 可变长度字符串

    基础篇 基础场景见上面两个帖子,这里单独说明字符串和可变长度字符串的用法. 话不多说,开始今天的演(表)示(演) Profile和插件开发 添加一个string类型的属性: 在插件里添加一条数据上报消 ...

  2. Nacos集群配置实例(windows下测试)

    1.首先 fork 一份 nacos 的代码到自己的 github 库,然后把代码 clone 到本地. git地址:https://github.com/alibaba/nacos.git 2.然后 ...

  3. postman tests常用方法

    postman常用方法集合: 1.设置环境变量 postman.setEnvironmentVariable("key", "value"); pm.envir ...

  4. iOS apns推送

    前言:推送分为本地推送以及远程推送. 两者的区别为本地推送一般为定时推送.定期推送或者位置推送.而远程推送更为多样化,能满足较高的要求.当然远程推送需要服务器端开发,开发流程较复杂. 1.本地推送只需 ...

  5. [TimLinux] CPU 常见架构介绍

    1. 简介 系统性能依赖硬件架构,CPU架构决定了硬件的布局.常见的CPU架构:SMP, NUMA, MPP. 2. SMP(对称多处理器) SMP:Symmetric Multiprocessing ...

  6. LCT(Link Cut Tree)总结

    概念.性质简述 首先介绍一下链剖分的概念链剖分,是指一类对树的边进行轻重划分的操作,这样做的目的是为了减少某些链上的修改.查询等操作的复杂度.目前总共有三类:重链剖分,实链剖分和并不常见的长链剖分. ...

  7. .Net Core 3.0 以及其前版本编写自定义主机,以允许本机程式(转载)

    像所有的托管代码一样,.NET Core 应用程序也由主机执行. 主机负责启动运行时(包括 JIT 和垃圾回收器等组件)和调用托管的入口点. 托管 .NET Core 运行时是高级方案,在大多数情况下 ...

  8. 一线互联网公司Redis使用精髓,你必须要掌握这4点!

    先来看一下这些Redis面试题你会几道? 1.什么是 Redis?简述它的优缺点? 2.Redis 与 memcached 相比有哪些优势? 3.Redis 支持哪几种数据类型? 4.Redis 主要 ...

  9. java面试题干货51-95

    51.类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断: try { throw new ExampleB("b") } catc ...

  10. 一个UI程序开始的代码函数导读

    #import "QFAppDelegate.h" @implementation QFAppDelegate //最后一个执行的初始化函数 //主要做一些启动之前的初始化操作 - ...