gpt4 book ai didi

javascript - 使用居中的用户指定文本动态创建 div

转载 作者:行者123 更新时间:2023-11-30 15:20:47 24 4
gpt4 key购买 nike

目标:

  1. 用户输入(名称和尺寸)
  2. 按下按钮
  3. 创建一个指定大小的可拖动对象,名称居中

到目前为止,我已经能够在单击按钮时创建一个可拖动对象,并放置一个静态字符串 <p>Task</p>在此对象内水平排列。

问题:如何根据用户输入动态改变这个可拖动对象的大小,并用用户给定的名称替换静态“文本”?

代码:如您所见,我在创建可拖动对象时在 .append() 中添加了任务。我认为这会起作用: "...<p id=Task>"+userGivenName+"</p> ?然而,即使这可行,我也无法将文本置于可拖动对象的中心。

<!doctype html>
<html>
<head>


<link href="_css/jquery-ui.min.css" rel="stylesheet">
<link href="_css/site.css" rel="stylesheet">

<script src="_js/jquery.min.js"></script>
<script src="_js/jquery-ui.min.js"></script>
<style>
.makeMeDraggable {
position: absolute;
top: 20;
left: 0;
width: 300px;
height: 300px;
background: blue;

}
.wrapper {
margin-top: 50px;
margin-bottom: 20px;
}
#Task {
text-align: center;
vertical-align: middle;
font-weight: bold;
color: black;
}

</style>

<script>

$('document').ready(function(){
$("#create_block").click(function(){
$('.tasker').append($("<div class='makeMeDraggable'><p>id=Task>Task</div>"));
$('.makeMeDraggable' ).draggable().css({
'width': '50px', //set width
'height': '50px' //set height
});
$('#Task').position({
my: "center",
at: "bottom",
of: ".makeMeDraggable"
});
});//end click
$('.makeMeDraggable').draggable().hide();

});//end ready
</script>


</head>
<body>
<div class="wrapper">
<div class="content">
<div class="main">
<h1>Draggable Task</h1>
<a class = "button" id="create_block">Create Task</a>
<div class="tasker">
<div class="makeMeDraggable">
<p id = Task>Task</p></div>
</div>
</div>
</div>
</div>
</div>
</body>


</html>

最佳答案

首先,您不应该使用生成具有相同 ID 的多个元素的代码。这总是会产生难以调试的错误。

其次,我相信您的代码可以简化。请参阅下面的代码段。

至于居中文本和自动宽度,只需将显示设置为 inline-block,而不指定 widthheight 并设置text-aligncenter 应该可以解决问题:

$(window).on('load', function() {
$("#create_block").click(function() {
if ($('input[name="task"]').val().length) {
let width = $('input[name="width"]').val() > 0 ?
'width:' + $('input[name="width"]').val() + 'px;':'',
height = $('input[name="height"]').val() > 0 ?
'height:' + $('input[name="height"]').val() + 'px;':'';
$('.tasker').append($("<div />", {
class: 'makeMeDraggable',
html: '<p>' + $('input[name="task"]').val() + '</p>',
style: width + height
}).draggable());
$('input').val('');
}
});
})
.makeMeDraggable {
position: absolute !important;
background: blue;
text-align: center;
display: inline-flex;
padding: 0 15px;
color: white;
align-items: center;
justify-content: center;
}

.tasker {
padding-top: 50px;
display: flex;
align-items: center;
justify-content: center;
}

.wrapper {
margin-top: 50px;
margin-bottom: 20px;
}
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js" integrity="sha256-eGE6blurk5sHj+rmkfsGYeKyZx3M4bG+ZlFyA7Kns7E=" crossorigin="anonymous"></script>

<div class="wrapper">
<div class="content">
<div class="main">
<h1>Draggable Task</h1>
<input name="task" type="text" placeholder="task name; cannot be empty"/><br />
<input name="width" type="number" placeholder="width; empty for auto"/><br />
<input name="height" type="number" placeholder="height; empty for auto" /><br />
<button id="create_block">Create Task</button>

<div class="tasker"></div>
</div>
</div>
</div>

旁注:将 .makeMeDraggable 的位置设置为 absolute 不会做任何事情,因为 .draggable() 会设置它到相对。如果您在规则上设置 !important 并尝试使用 transform:translateX(-50%) 将任务最初集中在 tasker 中,任务每次您开始拖动它们时,它们都会向左跳到宽度的 50%,这可能不是您想要的。

但是,.tasker 上的display:flex 似乎可以用于此目的。 (更新了带有 flex 居中的代码段)。

关于javascript - 使用居中的用户指定文本动态创建 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43749485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com