jquery - 跳动的 slideToggle 交互

标签 jquery html css

我正在尝试使用 jquery 创建一个可折叠面板。您可以通过单击人字形图标来尝试。如您所见,每次底部面板向上/向下滑动时,折叠面板的底部(“平衡”部分上方)看起来有点“跳动”或首先以不平滑的方式变高/变矮。有人知道为什么会这样吗?

(请耐心等待我的代码,我真的是网络开发新手)。

$( ".toggle-panel" ).click(function() {
  $( ".panel-hide" ).slideToggle( "slow", function() {

  });
});
.panel-bg {
  background-color: #F8F8F8; 
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 24px 0;
}

.panel {
  width: 720px;
  height: 100%;
  border-radius: 3px;
  background-color: #fff;
  box-shadow: 0px 3px 6px 0 rgba(0,0,0,0.15);
  font-size: 16px;
  cursor: pointer;
  margin: 0 auto;
  padding: 24px;
  color: #333;
}

.panel-title-row {
  display: block;
  width: 100%;
  border-collapse: collapse;
  border-bottom: solid 1px #c4c4c4;
}

.panel-title {
  display: inline-block;
  width: calc(100% - 125px);
  text-transform: uppercase;
  font-size: 14px;
  font-weight: 700;
  color: #0099ff;
  padding: 0;
}

.panel-subtitle {
  color: #999;
  text-transform: uppercase;
  font-weight: 700;
  font-size: 14px;
  padding-bottom: 8px;
  margin-top: 24px;
}

.panel-action {
  text-align: right;
  width: 120px;
  display: inline-block;
  padding:0px 0 15px 0;
  margin: 0;
}

.panel-action li {
  margin-left: 16px;
}

.panel-action li:last-child {
  margin-left: 32px;
}

.panel-action li i {
  color: #333;
  font-size: 12px;
}

.col-33 {
  width: 32.5%; 
  display: inline-block;
  padding: 0;
  vertical-align: top;
}

.col-66 {
  width: 66%;
  display: inline-block;
}

.panel-data {
  margin-bottom: 16px; 
}

.panel-data-label {
  font-weight: 700;
  font-size: 12px;
}

.panel-data-value {
  font-size: 13px; 
  margin-top: 8px;
}

.panel-content {
  display: block;
  width: 100%;
  padding-top: 16px;
}

.panel-data-horizontal {
  display: table;
  width: 100%;
  margin-bottom: 8px !important;
}

.panel-data-horizontal .panel-data-label,
.panel-data-horizontal .panel-data-value {
  display: table-cell;
  border-right: solid 8px transparent;
}

.panel-data-horizontal .panel-data-label {
  width: 160px; 
}

.panel-data-horizontal .panel-data-value {
  width: calc(100% - 120px);
}

.panel-data-label-sub,
.panel-data-value-sub {
  font-size: 13px; 
}

.panel-data-label-sub {
  font-weight: 400;
  padding-left: 24px;
  width: 136px !important;
}

.panel-data-last {
  margin-bottom: 24px !important; 
}

.horizontal-values {
  margin-top: 0 !important;
}

.panel-data-extend {
  font-size: 13px; 
  margin-bottom: 8px;
}

.panel-data-extend-label {
  font-size: 12px;
}

.panel-data-extend-divide {
  display: inline-block;
  vertical-align: top;
}

.panel-data-extend-container {
  margin-bottom: 0 !important; 
}

.panel-data-sentence {
  font-size: 13px;
  font-weight: 400;
}

.panel-data-sentence-value {
  font-weight: 700; 
}

@media (max-width: 575px) {
  .panel-data-horizontal .panel-data-label {
    width: 100%;
    display: block;
  }
  
  .panel-data-horizontal .panel-data-value {
    width: 100%;
    display: block;
  }
  
  .panel-data-label-sub,
  .panel-data-value-sub {
    display: inline-block !important;
    width: 40% !important;
  }
  
  .col-33 {
    width: 100%; 
  }
  
  .panel-data-extend {
    margin-bottom: 0; 
  }
  
  .panel-data-extend-container {
    margin-bottom: 16px !important; 
  }
}

@media (max-width: 767px) {
  .panel {
    width: calc(100% - 64px);
  }
}
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.11/css/all.css" integrity="sha384-p2jx59pefphTFIpeqCcISO9MdVfIm4pNnsL08A6v5vaQc4owkQqxMV8kg4Yvhaw/" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" rel="stylesheet">

<div class="panel-bg">

<div class="panel">
  <div class="panel-title-row">
    <div class="panel-title">
      Members
    </div>
    <ul class="panel-action">
      <li><i class="fas fa-pencil-alt"></i></li>
      <li><i class="fas fa-trash"></i></li>
      <li><i class="fas fa-chevron-down toggle-panel"></i></li>
    </ul>
  </div>
  <div class="panel-content">
    <div class="col-100">
      <div class="panel-data panel-data-horizontal panel-data-last">
        <div class="panel-data-label">
          Effective Date
        </div>
        <div class="panel-data-value">
          1 Jan 2018
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Employment Type
        </div>
        <div class="panel-data-value">
          Permanent
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Job Level
        </div>
        <div class="panel-data-value">
          Staff
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Job Title
        </div>
        <div class="panel-data-value">
          Software Development Engineer, System Engineer, Security Engineer, UI/UX Designer, Project Manager, Data Analyst, Data Scientist, AI Engineer, Human Resources Officer
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Organization
        </div>
        <div class="panel-data-value">
          ICT, HR
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Marital Status
        </div>
        <div class="panel-data-value">
          All
        </div>
      </div>
      <div class="panel-data panel-data-horizontal panel-data-last">
        <div class="panel-data-label">
          Location
        </div>
        <div class="panel-data-value">
          All
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Family Reimbursement
        </div>
        <div class="panel-data-value">
          No
        </div>
      </div>
    </div>
  </div>
  
  <div class="panel-hide">
  <div class="panel-title-row">
    <div class="panel-subtitle">
      Balance
    </div>
  </div>
  <div class="panel-content">
    <div class="col-100">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Total Claim To Be Paid
        </div>
        <div class="panel-data-value">
          <div class="panel-data panel-data-horizontal">
            <div class="panel-data-label panel-data-label-sub">
              For employee
            </div>
            <div class="panel-data-value-sub">
              100%
            </div>
          </div>
        </div>
        <div class="panel-data-value">
          <div class="panel-data panel-data-horizontal">
            <div class="panel-data-label panel-data-label-sub">
              For family
            </div>
            <div class="panel-data-value-sub">
              90%
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="panel-data panel-data-vertical">
      <div class="panel-data-label">
        Currency
      </div>
      <div class="panel-data-value">
        Indonesian Rupiah
      </div>
    </div>
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Limit Per Claim
        </div>
        <div class="panel-data-value">
          Unlimited
        </div>
      </div>
    </div>
    <div class="col-66">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
         Limit Balance Type
        </div>
        <div class="panel-data-value">
          Editable
        </div>
      </div>
    </div>
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Limit Balance
        </div>
        <div class="panel-data-value">
          10,000,000.00
        </div>
      </div>
    </div>
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
         Over-Limit Balance
        </div>
        <div class="panel-data-value">
          No
        </div>
      </div>
    </div>
  </div>
  <div class="panel-title-row">
    <div class="panel-subtitle">
      Additional Balance Based On Tenure
    </div>
  </div>
    <div class="panel-content">
      <div class="panel-data panel-data-extend-container">
        <div class="col-33">
           <div class="panel-data-extend panel-data-extend-label">
           <b>1 working year(s)</b>
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
         1,000,000.00 balance increase
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
          <div class="panel-data-extend-divide">
           Total balance &nbsp;
          </div>
          <div class="panel-data-extend-divide">
           Editable + 1,000,000.00
          </div>
        </div>
      </div>
    </div>
    <div class="panel-data panel-data-extend-container">
      <div class="col-33">
        <div class="panel-data-extend panel-data-extend-label">
          <b>2 working year(s)</b>
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
         2,000,000.00 balance increase
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
          <div class="panel-data-extend-divide">
           Total balance &nbsp;
          </div>
          <div class="panel-data-extend-divide">
           Editable + 2,000,000.00
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="panel-title-row">
    <div class="panel-subtitle">
      Period
    </div>
  </div>
  <div class="panel-content">
    
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Repeat Period
        </div>
        <div class="panel-data-value">
          Yes
        </div>
      </div>
    </div>
    <div class="col-66">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Repeat Type By
        </div>
        <div class="panel-data-value">
          Fixed Date
        </div>
      </div>
    </div>
    <div class="col-100">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label panel-data-sentence">
          Repeat limit balance every: <span class="panel-data-sentence-value">From 01 Jan 2018, every 12 month(s)</span>
        </div>
        <div class="panel-data-value">
          <div class="panel-data panel-data-horizontal">
            <div class="panel-data-label panel-data-label-sub">
              Current Period
            </div>
            <div class="panel-data-value-sub">
              01 Jan 2018 &ndash; 31 Dec 2018
            </div>
          </div>
        </div>
      </div>
    </div>
    </div>
  
  </div> 
</div>
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

最佳答案

我尝试从中更改 css

.panel-subtitle {
    color: #999;
    text-transform: uppercase;
    font-weight: 700;
    font-size: 14px;
    padding-bottom: 8px;
    margin-top: 24px;
}

.panel-subtitle {
    color: #999;
    text-transform: uppercase;
    font-weight: 700;
    font-size: 14px;
    padding-bottom: 8px;
    padding-top: 24px;
}

$( ".toggle-panel" ).click(function() {
  $( ".panel-hide" ).slideToggle( "slow", function() {

  });
});
.panel-bg {
  background-color: #F8F8F8; 
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 24px 0;
}

.panel {
  width: 720px;
  height: 100%;
  border-radius: 3px;
  background-color: #fff;
  box-shadow: 0px 3px 6px 0 rgba(0,0,0,0.15);
  font-size: 16px;
  cursor: pointer;
  margin: 0 auto;
  padding: 24px;
  color: #333;
}

.panel-title-row {
  display: block;
  width: 100%;
  border-collapse: collapse;
  border-bottom: solid 1px #c4c4c4;
}

.panel-title {
  display: inline-block;
  width: calc(100% - 125px);
  text-transform: uppercase;
  font-size: 14px;
  font-weight: 700;
  color: #0099ff;
  padding: 0;
}

.panel-subtitle {
  color: #999;
  text-transform: uppercase;
  font-weight: 700;
  font-size: 14px;
  padding-bottom: 8px;
  padding-top: 24px;
}

.panel-action {
  text-align: right;
  width: 120px;
  display: inline-block;
  padding:0px 0 15px 0;
  margin: 0;
}

.panel-action li {
  margin-left: 16px;
}

.panel-action li:last-child {
  margin-left: 32px;
}

.panel-action li i {
  color: #333;
  font-size: 12px;
}

.col-33 {
  width: 32.5%; 
  display: inline-block;
  padding: 0;
  vertical-align: top;
}

.col-66 {
  width: 66%;
  display: inline-block;
}

.panel-data {
  margin-bottom: 16px; 
}

.panel-data-label {
  font-weight: 700;
  font-size: 12px;
}

.panel-data-value {
  font-size: 13px; 
  margin-top: 8px;
}

.panel-content {
  display: block;
  width: 100%;
  padding-top: 16px;
}

.panel-data-horizontal {
  display: table;
  width: 100%;
  margin-bottom: 8px !important;
}

.panel-data-horizontal .panel-data-label,
.panel-data-horizontal .panel-data-value {
  display: table-cell;
  border-right: solid 8px transparent;
}

.panel-data-horizontal .panel-data-label {
  width: 160px; 
}

.panel-data-horizontal .panel-data-value {
  width: calc(100% - 120px);
}

.panel-data-label-sub,
.panel-data-value-sub {
  font-size: 13px; 
}

.panel-data-label-sub {
  font-weight: 400;
  padding-left: 24px;
  width: 136px !important;
}

.panel-data-last {
  margin-bottom: 24px !important; 
}

.horizontal-values {
  margin-top: 0 !important;
}

.panel-data-extend {
  font-size: 13px; 
  margin-bottom: 8px;
}

.panel-data-extend-label {
  font-size: 12px;
}

.panel-data-extend-divide {
  display: inline-block;
  vertical-align: top;
}

.panel-data-extend-container {
  margin-bottom: 0 !important; 
}

.panel-data-sentence {
  font-size: 13px;
  font-weight: 400;
}

.panel-data-sentence-value {
  font-weight: 700; 
}

@media (max-width: 575px) {
  .panel-data-horizontal .panel-data-label {
    width: 100%;
    display: block;
  }
  
  .panel-data-horizontal .panel-data-value {
    width: 100%;
    display: block;
  }
  
  .panel-data-label-sub,
  .panel-data-value-sub {
    display: inline-block !important;
    width: 40% !important;
  }
  
  .col-33 {
    width: 100%; 
  }
  
  .panel-data-extend {
    margin-bottom: 0; 
  }
  
  .panel-data-extend-container {
    margin-bottom: 16px !important; 
  }
}

@media (max-width: 767px) {
  .panel {
    width: calc(100% - 64px);
  }
}
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.11/css/all.css" integrity="sha384-p2jx59pefphTFIpeqCcISO9MdVfIm4pNnsL08A6v5vaQc4owkQqxMV8kg4Yvhaw/" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i" rel="stylesheet">

<div class="panel-bg">

<div class="panel">
  <div class="panel-title-row">
    <div class="panel-title">
      Members
    </div>
    <ul class="panel-action">
      <li><i class="fas fa-pencil-alt"></i></li>
      <li><i class="fas fa-trash"></i></li>
      <li><i class="fas fa-chevron-down toggle-panel"></i></li>
    </ul>
  </div>
  <div class="panel-content">
    <div class="col-100">
      <div class="panel-data panel-data-horizontal panel-data-last">
        <div class="panel-data-label">
          Effective Date
        </div>
        <div class="panel-data-value">
          1 Jan 2018
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Employment Type
        </div>
        <div class="panel-data-value">
          Permanent
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Job Level
        </div>
        <div class="panel-data-value">
          Staff
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Job Title
        </div>
        <div class="panel-data-value">
          Software Development Engineer, System Engineer, Security Engineer, UI/UX Designer, Project Manager, Data Analyst, Data Scientist, AI Engineer, Human Resources Officer
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Organization
        </div>
        <div class="panel-data-value">
          ICT, HR
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Marital Status
        </div>
        <div class="panel-data-value">
          All
        </div>
      </div>
      <div class="panel-data panel-data-horizontal panel-data-last">
        <div class="panel-data-label">
          Location
        </div>
        <div class="panel-data-value">
          All
        </div>
      </div>
      <div class="panel-data panel-data-horizontal">
        <div class="panel-data-label">
          Family Reimbursement
        </div>
        <div class="panel-data-value">
          No
        </div>
      </div>
    </div>
  </div>
  
  <div class="panel-hide">
  <div class="panel-title-row">
    <div class="panel-subtitle">
      Balance
    </div>
  </div>
  <div class="panel-content">
    <div class="col-100">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Total Claim To Be Paid
        </div>
        <div class="panel-data-value">
          <div class="panel-data panel-data-horizontal">
            <div class="panel-data-label panel-data-label-sub">
              For employee
            </div>
            <div class="panel-data-value-sub">
              100%
            </div>
          </div>
        </div>
        <div class="panel-data-value">
          <div class="panel-data panel-data-horizontal">
            <div class="panel-data-label panel-data-label-sub">
              For family
            </div>
            <div class="panel-data-value-sub">
              90%
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="panel-data panel-data-vertical">
      <div class="panel-data-label">
        Currency
      </div>
      <div class="panel-data-value">
        Indonesian Rupiah
      </div>
    </div>
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Limit Per Claim
        </div>
        <div class="panel-data-value">
          Unlimited
        </div>
      </div>
    </div>
    <div class="col-66">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
         Limit Balance Type
        </div>
        <div class="panel-data-value">
          Editable
        </div>
      </div>
    </div>
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Limit Balance
        </div>
        <div class="panel-data-value">
          10,000,000.00
        </div>
      </div>
    </div>
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
         Over-Limit Balance
        </div>
        <div class="panel-data-value">
          No
        </div>
      </div>
    </div>
  </div>
  <div class="panel-title-row">
    <div class="panel-subtitle">
      Additional Balance Based On Tenure
    </div>
  </div>
    <div class="panel-content">
      <div class="panel-data panel-data-extend-container">
        <div class="col-33">
           <div class="panel-data-extend panel-data-extend-label">
           <b>1 working year(s)</b>
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
         1,000,000.00 balance increase
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
          <div class="panel-data-extend-divide">
           Total balance &nbsp;
          </div>
          <div class="panel-data-extend-divide">
           Editable + 1,000,000.00
          </div>
        </div>
      </div>
    </div>
    <div class="panel-data panel-data-extend-container">
      <div class="col-33">
        <div class="panel-data-extend panel-data-extend-label">
          <b>2 working year(s)</b>
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
         2,000,000.00 balance increase
        </div>
      </div>
      <div class="col-33">
        <div class="panel-data-extend">
          <div class="panel-data-extend-divide">
           Total balance &nbsp;
          </div>
          <div class="panel-data-extend-divide">
           Editable + 2,000,000.00
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="panel-title-row">
    <div class="panel-subtitle">
      Period
    </div>
  </div>
  <div class="panel-content">
    
    <div class="col-33">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Repeat Period
        </div>
        <div class="panel-data-value">
          Yes
        </div>
      </div>
    </div>
    <div class="col-66">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label">
          Repeat Type By
        </div>
        <div class="panel-data-value">
          Fixed Date
        </div>
      </div>
    </div>
    <div class="col-100">
      <div class="panel-data panel-data-vertical">
        <div class="panel-data-label panel-data-sentence">
          Repeat limit balance every: <span class="panel-data-sentence-value">From 01 Jan 2018, every 12 month(s)</span>
        </div>
        <div class="panel-data-value">
          <div class="panel-data panel-data-horizontal">
            <div class="panel-data-label panel-data-label-sub">
              Current Period
            </div>
            <div class="panel-data-value-sub">
              01 Jan 2018 &ndash; 31 Dec 2018
            </div>
          </div>
        </div>
      </div>
    </div>
    </div>
  
  </div> 
</div>
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于jquery - 跳动的 slideToggle 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50381906/

相关文章:

javascript - 在此示例中,为什么 window.getSelection() on focus 在 Chrome 中不起作用?

javascript - jQuery - 两个链接事件,禁用自身并启用另一个

javascript - 出现在父元素顶部的子元素的框阴影

html - 如何拉伸(stretch)活型

css - 为什么我的窗口小部件不在屏幕中央?

javascript - div 动态创建,但图像不会附加到其上

jquery - 源/背景网址/?

html - 让 child 包裹在一个具有一定高度的div中

html - 如何在选择下拉菜单上设置 Font Awesome 图标?

css - 地址栏中的 Logo