使用JavaScript重新排列元素

邮袋

我正在尝试做我的朋友为我做的一小段代码练习。该应用程序的重点是在文本字段中输入资产名称,然后使用javascript,框中的文本将向上移动到中心,当您键入另一资产名称时,旧资产名称将下降,新资产名称将下降。提升。以下是HTML,CSS和JavaScript代码,任何帮助都将非常有用:)

$(function() {
  $("input[name='faux-address-bar']").focusout(function() {})
})

$("assest1").focusin(function(){
$(span).css("vertical-align", "top");
});
  
$("assest2").focusin(function(){
$(span).css("vertical-align", "top");
});
  
$("assest3").focusin(function(){
$(span).css("vertical-align", "top");
});
body {
  margin: 20px;
  font-family: arial;
}

.container div {
  border: 1px solid black;
  width: 49%;
  float: left;
  height: 300px;
  line-height: 300px;
  text-align: center;
  font-size: 20px;
  &:first-child {
    width: 100%;
    margin-top: 20px;
    margin-bottom: 10px;
  }
  &:nth-child(3) {
    float: right;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="text" value="?asset=1" name="faux-address-bar">

<div class="container">
  <div id="asset1"><span>ASSET 1</span></div>
  <div id="asset2"><span>ASSET 2</span></div>
  <div id="asset3"><span>ASSET 3</span></div>
</div>

插口

我有一些空闲时间,也想尝试一下您朋友的运动。

我的解决方案假定:

  1. 输入框?asset=nn要更改的数字在哪里)将始终遵循模式?asset=n
  2. ES6是a-o-k
  3. CSS在not作弊。
  4. 除了最新版本的Chrome外,别无其他...完全可以。

话虽如此,我想利用CSS提供的排序功能(我是守旧派,与其他人在网上阅读的内容相反/我最近在网上阅读的内容相反,我相信我们在野生与野生环境中的关注点分离通话front end development 还没有结束)。

话虽如此,在某些CSS变量中“摇一摇”(tm)和重新排列变得更加容易了!

我的算法很糟糕(我没有花太多时间在考虑这个问题),但是这是一种希望其他人可以从中学习(或者被引入到新的东西中……)的一种方法,如果您想到一种优化代码的方法,我希望看到它!

JSFiddle:http : //jsfiddle.net/6hmcv0tn/1/

// Look ma, no globals!
{
    // Cache queried elements for quicker reference
    let input = document.querySelector('[name="faux-address-bar"]');
    let container = document.querySelector('.container');
    let children = container.querySelectorAll('div');

    // Define our onkeyup handler
    let handler = e => {

        // Because we assume ?asset=n is constant, we can
        // reference the number after = as our element to
        // re-arrange
        let val = e.target.value;
        let assetIndex = val.split('=')[1];

        // Check for presence of element to re-arrange
        if (assetIndex && container.querySelector('#asset' + assetIndex)) {

            // CSS3 variable keys to modify
            let keys = ['--first-item', '--second-item', '--third-item'];

            // Our forEach callback for re-arranging elements
            let swapper = (order, idx) => {
                let el = children[idx];
                el.style.setProperty(keys[idx], order);
            }

            // Default ordering of elements using CSS3
            // flexbox ordering
            let set = [1,2,3];

            // Updates ordering based on asset entered
            switch (assetIndex) {
                case '1':
                    set = [2, 1, 3];
                    break;
                case '3':
                    set = [1, 3, 2];
                    break;
                default:
                break;
            }

            // Blindly loop over set and apply order to elements
            set.forEach(swapper);
        }
    }

    // Registers our key up handler
    input.addEventListener('keyup', handler, true);

    // For fun, update the order on load
    handler({target: input});
}
:root {
  --first-item: 1;
  --second-item: 2;
  --third-item: 3;
}

.container {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

.container>div {
  width: 100px;
  height: 100px;
  border: 5px solid #aec8f2;
  border-radius: 20px;
  background-color: #5b7193;
  color: #fff;
  font-family: monospace;
  justify-content: center;
  align-items: center;
  display: flex;
  margin: 20px;
  transition: all 1s;
  font-size: 30px;
}

input {
  width: 300px;
  height: 30px;
  margin: 0 auto;
  display: block;
  text-align: center;
  border-radius: 20px;
  border: 5px solid #d8efc2;
  background-color: #82996c;
  color: #fff;
  font-size: 20px;
}

.container div:nth-child(1) {
  order: var(--first-item);
}
.container div:nth-child(2) {
  order: var(--second-item);
}
.container div:nth-child(3) {
  order: var(--third-item);
}
<input type="text" value="?asset=1" name="faux-address-bar">

<div class="container">
  <div id="asset1"><span>1</span></div>
  <div id="asset2"><span>2</span></div>
  <div id="asset3"><span>3</span></div>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章