首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么removeChild方法不删除元素?

为什么removeChild方法不删除元素?
EN

Stack Overflow用户
提问于 2021-12-19 16:22:16
回答 1查看 54关注 0票数 0

我通过使用香草javascript实现了吐司通知。代码工作得很好,但是有一个问题,为什么下面的代码不能工作?我应该替换什么,添加什么或者删除什么?我不明白为什么不管用,谁能解释一下吗?

代码语言:javascript
复制
const autoRemove = setTimeout(function () {
        item.removeChild(toast);
    }, duration + 1000);

下面是完整应用程序的代码片段:

代码语言:javascript
复制
function toast({title = '', description = '', type = message, duration = 5000}) {
    const item = document.querySelector('#toast');
    if(item) {
        const toast = document.createElement('div');

        const autoRemove = setTimeout(function () {
            item.removeChild(toast);
        }, duration + 1000);

        toast.addEventListener('click', function(event) {
        if (event.target.closest('.close')) {
                item.removeChild(toast);
                clearTimeout(autoRemove);
            }
        });

        const delay = (duration / 1000).toFixed(2);

        toast.classList.add('toast', `${type}`);
        toast.style.animation = `slide ease 1s, out ease 1s ${delay}s forwards`;
        
        toast.innerHTML = `
        <div>
            <span class="title">${title}</span>
            <i class="close fas fa-times"></i>
        </div>
        <p class="description">${description}</p>`;

        item.appendChild(toast);
    }
}

const button = document.querySelector('.button');

button.addEventListener('click', function() {
    toast ({
        title: 'Lorem ipsum',
        description: 'Lorem ipsum dolor sit amet',
        type: 'message',
        duration: '5000'
    });
});
代码语言:javascript
复制
body {
    font-family: Arial, Helvetica, sans-serif;
    min-height: 100vh;
}

.container {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);

    display: flex;
    justify-content: center;
    align-items: center;
}

*,
*:before,
*:after
{
    box-sizing: border-box;

    margin: 0;
    padding: 0;
}

.button
{
    cursor: pointer;
    border: none;
    text-transform: uppercase;
    white-space: nowrap;

    color: #fff;
    background-color: #21262b;

    border-radius: 5px;
    padding: 10px;
    font-size: 14px;

    font-weight: bold;
}

@media(max-width: 992px) {
    .container {
        flex-direction: column;
    }
}

#toast {
    position: fixed;
    top: 25px;
    right: 25px;
    z-index: 100;
}

.toast {
    background: #fff;
    box-shadow: rgba(100, 100, 110, 0.25) 0px 5px 30px 0px;
    padding: 20px;
    width: 250px;
    border-radius: 7.5px;
    border-left: 5px solid;
    transition: all ease 0.25s;
}

.toast div {
    display: flex;
    justify-content: space-between;
}

.toast + .toast {
    margin-top: 20px;
}

.toast.message {
    border-color: #21262b;
}

.toast.message .title {
    color: #21262b;
}

.toast.message .close {
    color: #21262b;
}

.toast.success {
    border-color: #20bdff;
}

.toast.success .title {
    color: #20bdff;
}

.toast.success .close{
    color: #20bdff;
}

.toast.error {
    border-color: #f85032;
}

.toast.error .title {
    color: #f85032;
}

.toast.error .close{
    color: #f85032;
}

@keyframes slide {
    from {
        opacity: 0;
        transform: translate(calc(100% + 25px), 0);
    }

    to {
        opacity: 1;
        transform: translate(0);
    }
}

@keyframes out {
    from {
        opacity: 1;
        transform: translate(0);
    }

    to {
        opacity: 0;
        transform: translate(calc(100% + 25px), 0);
    }
}

.title {
    font-weight: bold;
    font-size: 20px;
}

.description {
    margin-top: 10px;
    font-size: 12px;
}

.close {
    font-size: 20px;
    cursor: pointer;
}
代码语言:javascript
复制
<div class="container">
  <button class="button">Toast Button</button>
</div>
  <div id="toast"></div>
    
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/js/all.min.js"></script>

EN

Stack Overflow用户

回答已采纳

发布于 2021-12-19 16:38:00

当您创建祝酒词时(在示例中),您将传递duration: '5000'。然后在toast()中使用duration + 1000的延迟,这将导致'50001000',而不是预期的6000

您可以将持续时间作为数字传递,也可以将字符串解析为数字,然后添加1000

代码语言:javascript
复制
button.addEventListener('click', function() {
    toast ({
        title: 'Lorem ipsum',
        description: 'Lorem ipsum dolor sit amet',
        type: 'message',
        duration: 5000
    });
});

代码语言:javascript
复制
const autoRemove = setTimeout(function () {
    item.removeChild(toast);
}, Number(duration) + 1000);
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70413217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档