javascript - 如何为可移动 DIVS 创建显示更多/更少按钮

标签 javascript jquery html css

下面的代码由 2 个列表 Total Fruits 和 Random Fruits 组成,我可以将值从一个列表移动到另一个列表,反之亦然。我正在尝试在我的代码中实现显示更少/更多按钮,但很多在线示例似乎不适用于我当前的情况,因为我的 div 是可移动的。

对于我当前的代码,显示更多/更少按钮有效,但在我将所有值移动到另一个列表之后。当我单击“显示更多”时,它不会显示所有值,它会在中途中断。

任何帮助将不胜感激,因为我真的无法在网上找到一个好的例子。

var redpill = {};
var greenpill = {};
var randompill = {};


var key = "Red Fruits";
redpill[key] = ['Apple', 'Cherry', 'Strawberry', 'Pomegranate', 'Rassberry', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew'];

var key2 = "Green Fruits";
greenpill[key2] = ['Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew'];

var key3 = "Random Fruits";
randompill[key3] = ['Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew'];

function redraw() {
  var combineString = '';
  $.each(redpill[key], function(index) {
    combineString += ('<div class="pilldiv redpill class">' + redpill[key][index] + '</div>');
  });
  $('.combineclass').html(combineString);

  $.each(greenpill[key2], function(index) {
    combineString += ('<div class="pilldiv greenpill class">' + greenpill[key2][index] + '</div>');
  });
  $('.combineclass').html(combineString);

  var randomString = '';
  $.each(randompill[key3], function(index) {
    randomString += ('<div class="pilldiv randompill class">' + randompill[key3][index] + '</div>');
  });
  $('.randomclass').html(randomString);
}

function listener() {
  $(document).ready(function() {
    $(document).on("click", "#suggestid div", function() {
      data = this.innerHTML;
      $(".total_count_Green_Fruits").html(key2 + ': ' + greenpill[key2].length);
      var element = $(this).detach();
      $('#currentid').prepend('<div class="new-green-fruit pilldiv class ">' + element.html() + '</div>');
    });
  });

  $('body').on('click', 'div.new-green-fruit', function() {
    data2 = this.innerHTML;
    $(this).detach();
    var element2 = $(this).detach();
    $('#suggestid').prepend('<div class="pilldiv randompill class" >' + element2.html() + '</div>');
  });
}
redraw();
listener();

var slideHeight = 300;
$(".container").each(function() {
    var $this = $(this);
    var $wrap = $this.children(".wrapper");
    var defHeight = $wrap.height();
    if (defHeight >= slideHeight) {
        var $readMore = $this.find(".read-more");
        $wrap.css("height", slideHeight + "px");
        $readMore.append("<a href='#'>Show More</a>");
        $readMore.children("a").bind("click", function(event) {
            var curHeight = $wrap.height();
            if (curHeight == slideHeight) {
                $wrap.animate({
                    height: defHeight
                }, "normal");
                $(this).text("Show Less");
                $wrap.children(".gradient").fadeOut();
            } else {
                $wrap.animate({
                    height: slideHeight
                }, "normal");
                $(this).text("Show More");
                $wrap.children(".gradient").fadeIn();
            }
            return false;
        });
    }
});
.pilldiv {
  padding: 8px 15px;
  text-align: center;
  font-size: 15px;
  border-radius: 25px;
  color: Black;
  margin: 2px;
}

.randompill:after {
  content: "\002B";
  float: left;
  width: 16px;
}

.new-green-fruit:after {
  content: "\292B";
  float: left;
  width: 16px;
}

.redpill {
  background-color: Pink;
  cursor: default;
}

.greenpill {
  background-color: SpringGreen;
  cursor: default;
}

.randompill {
  background-color: LightBlue;
  cursor: pointer;
}

.class {
  font-family: Open Sans;
}

.center {
  display: flex;
  justify-content: center;
}

.wrappingflexbox {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.top {
  margin-bottom: 20px
}

h3 {
  font-weight: normal;
}

.panel {
  display: table;
  height: 100%;
  width: 85%;
  background-color: white;
  border: 1px solid black;
  margin-left: auto;
  margin-right: auto;
}

.new-green-fruit {
  background-color: LightBlue;
  cursor: pointer;
}

.top {
  margin-bottom: 30px;
}
#leftpanel{
  float:left;
  width:calc(50% - 5px);
  background-color:#f2f2f2;"
}
#rightpanel{
  float:right;
  width:calc(50% - 5px);
  background-color:#f2f2f2;"
}
.container{
    width:100%;    
}

.wrapper {
    position:relative;
    overflow:hidden;
    padding:10px;
}

.gradient {
    width:100%;
    height:35px;
    background:url(http://spoonfedproject.com/wp-content/uploads/demo/jquer-slide/images/bg-gradient.png) repeat-x;
    position:absolute;
    bottom:0;
    left:0;
}

.read-more {
    background:#fff;
    color:#333;
    padding:5px;
}

.read-more a {
    padding-right:22px;
    font-weight:700;
    text-decoration:none;
}

.read-more a:hover {
    color:#000;
}
<!DOCTYPE html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<head>
    <meta charset="utf-8" />
    <link rel="shortcut icon" href="//#" />

</head>

<body>
  <div class ="container">
    <div class="wrapper">
        <div id=leftpanel>
          <h3 class="class center">Total Fruits</h3>
          <div id="currentid" class="combineclass wrappingflexbox top"></div>
          
          <div class="gradient">
            </div>
        </div>
      
        <div id="rightpanel">
          <h3 class="class center">Random Fruits</h3>
          <div id="suggestid" class="randomclass wrappingflexbox top"></div>
          
          <div class="gradient">
            </div>
            </div>
        </div>
        <div class="read-more">
    </div>
    </div>

    </body>
</html>

最佳答案

我想我解决了你的问题。

var redpill = {};
var greenpill = {};
var randompill = {};


var key = "Red Fruits";
redpill[key] = ['Apple', 'Cherry', 'Strawberry', 'Pomegranate', 'Rassberry', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew'];

var key2 = "Green Fruits";
greenpill[key2] = ['Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew'];

var key3 = "Random Fruits";
randompill[key3] = ['Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew', 'Watermelon', 'Durian', 'Avacado', 'Lime', 'Honeydew'];

function redraw() {
  var combineString = '';
  $.each(redpill[key], function(index) {
    combineString += ('<div class="pilldiv redpill class">' + redpill[key][index] + '</div>');
  });
  $('.combineclass').html(combineString);

  $.each(greenpill[key2], function(index) {
    combineString += ('<div class="pilldiv greenpill class">' + greenpill[key2][index] + '</div>');
  });
  $('.combineclass').html(combineString);

  var randomString = '';
  $.each(randompill[key3], function(index) {
    randomString += ('<div class="pilldiv randompill class">' + randompill[key3][index] + '</div>');
  });
  $('.randomclass').html(randomString);
}

function listener() {
  $(document).ready(function() {
    $(document).on("click", "#suggestid div", function() {
      data = this.innerHTML;
      $(".total_count_Green_Fruits").html(key2 + ': ' + greenpill[key2].length);
      var element = $(this).detach();
      $('#currentid').prepend('<div class="new-green-fruit pilldiv class ">' + element.html() + '</div>');
    });
  });

  $('body').on('click', 'div.new-green-fruit', function() {
    data2 = this.innerHTML;
    $(this).detach();
    var element2 = $(this).detach();
    $('#suggestid').prepend('<div class="pilldiv randompill class" >' + element2.html() + '</div>');
  });
}
redraw();
listener();
var checkClickBoolean = false;
var slideHeight = $(".combineclass").height();
$(".container").each(function() {
  var $this = $(this);
  var $wrap = $this.children(".wrapper");
  var defHeight = $wrap.height();
  if (defHeight >= slideHeight) {
    var $readMore = $this.find(".read-more");
    $wrap.css("height", slideHeight + "px");
    $readMore.append("<a href='#'>Show More</a>");
    $readMore.children("a").bind("click", function(event) {
      var curHeight = $(".combineclass").height();
      curHeight = curHeight + Math.abs($("#leftpanel").outerHeight() - curHeight);

      if (checkClickBoolean == false) {
        var resultHeight = defHeight;
        if (curHeight > defHeight)
          resultHeight = curHeight;
        checkClickBoolean = true;
        $wrap.animate({
          height: resultHeight
        }, "normal");
        $(this).text("Show Less");
        $wrap.children(".gradient").fadeOut();
      } else {
        checkClickBoolean = false;
        $wrap.animate({
          height: defHeight - 89
        }, "normal");
        $(this).text("Show More");
        $wrap.children(".gradient").fadeIn();
      }
      return false;
    });
  }
});
.pilldiv {
  padding: 8px 15px;
  text-align: center;
  font-size: 15px;
  border-radius: 25px;
  color: Black;
  margin: 2px;
}

.randompill:after {
  content: "\002B";
  float: left;
  width: 16px;
}

.new-green-fruit:after {
  content: "\292B";
  float: left;
  width: 16px;
}

.redpill {
  background-color: Pink;
  cursor: default;
}

.greenpill {
  background-color: SpringGreen;
  cursor: default;
}

.randompill {
  background-color: LightBlue;
  cursor: pointer;
}

.class {
  font-family: Open Sans;
}

.center {
  display: flex;
  justify-content: center;
}

.wrappingflexbox {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.top {
  margin-bottom: 20px;
}

h3 {
  font-weight: normal;
}

.panel {
  display: table;
  height: 100%;
  width: 85%;
  background-color: white;
  border: 1px solid black;
  margin-left: auto;
  margin-right: auto;
}

.new-green-fruit {
  background-color: LightBlue;
  cursor: pointer;
}

.top {
  margin-bottom: 30px;
}

#leftpanel {
  float: left;
  width: calc(50% - 5px);
  background-color: #f2f2f2;
}

#rightpanel {
  float: right;
  width: calc(50% - 5px);
  background-color: #f2f2f2;
}

.container {
  width: 100%;
}

.wrapper {
  position: relative;
  overflow: hidden;
  padding: 10px;
}

.gradient {
  width: 100%;
  height: 35px;
  background: url(http://spoonfedproject.com/wp-content/uploads/demo/jquer-slide/images/bg-gradient.png) repeat-x;
  position: absolute;
  bottom: 0;
  left: 0;
}

.read-more {
  background: #fff;
  color: #333;
  padding: 5px;
}

.read-more a {
  padding-right: 22px;
  font-weight: 700;
  text-decoration: none;
}

.read-more a:hover {
  color: #000;
}

.combineclass {
  height: auto;
  overflow-y: visible;
}
<!DOCTYPE html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>

<head>
  <meta charset="utf-8" />
  <link rel="shortcut icon" href="//#" />

</head>

<body>
  <div class="container">
    <div class="wrapper">
      <div id=leftpanel>
        <h3 class="class center">Total Fruits</h3>
        <div id="currentid" class="combineclass wrappingflexbox top"></div>

        <div class="gradient">
        </div>
      </div>

      <div id="rightpanel">
        <h3 class="class center">Random Fruits</h3>
        <div id="suggestid" class="randomclass wrappingflexbox top"></div>

        <div class="gradient">
        </div>
      </div>
    </div>
    <div class="read-more">
    </div>
  </div>

</body>

</html>

关于javascript - 如何为可移动 DIVS 创建显示更多/更少按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51076452/

相关文章:

javascript - 单击电话间隙时按钮不会改变颜色

javascript - 如何通过单击单选按钮提交此 PHP 投票表单?

javascript - 动态评论功能代码

javascript - 如何使用javascript查找字符串中是否包含特定数量的连续连续数字?

javascript - 如何解析 JQuery Ajax 中的 Web 服务 url?

javascript - 使用 Javascript 搜索 HTML 表格并保留找到匹配项的完整表格行并删除其余部分

javascript - 使用 HTML5 文件 API 在浏览器中创建音频列表

javascript - (jQuery) 使用 extend() 访问自定义属性时出现问题

javascript - 从 JavaScript 中的私有(private)函数访问公共(public)函数

HTML DropDown 按钮内容卡在导航栏中