console
const Observer = (function() {
let _messages = {};
return {
register(type, fn) {
if (typeof _messages[type] === 'undefined') {
_messages[type] = [fn];
} else {
_messages[type].push(fn);
}
},
fire(type, args) {
if (!_messages[type]) {
return;
}
const events = {
type: type,
args: args || {}
};
for (let i = 0, len = _messages[type].length; i < len; i++) {
_messages[type][i].call(this, events);
}
},
remove(type, fn) {
if (_messages[type] instanceof Array) {
for (let i = _messages[type].length - 1; i >= 0; i--) {
_messages[type][i] === fn && _messages[type].splice(i, 1);
}
}
}
}
})();
function $(id) {
return document.getElementById(id);
}
(function() {
function addMsgItem(e) {
let text = e.args.text,
ul = $('msg'),
li = document.createElement('li'),
span = document.createElement('span');
li.innerHTML = text;
span.onclick = function() {
ul.removeChild(li);
Observer.fire('removeCommentMessage', {
num: -1
});
};
ul.appendChild(li);
ul.appendChild(li);
}
Observer.register('addCommentMessage', addMsgItem);
})();
(function() {
function changeMseNum(e) {
let num = e.args.num;
const $msgNum = $('msgNum');
$msgNum.innerHTML = parseInt($msgNum.innerHTML) + num;
}
Observer.register('addCommentMessage', changeMseNum);
Observer.register('removeCommentMessage', changeMseNum);
})();
(function() {
$('useSubmit').onclick = function() {
const text = $('useInput');
if (!text.value) {
return;
}
Observer.fire('addCommentMessage', {
text: text.value,
num: 1
});
text.value = '';
}
})();
<article>
<header>
<span>
消息数:
</span>
<span id="msgNum">
1
</span>
</header>
<section>
<h1>
最新消息发布
</h1>
<ul id="msg">
<li>
天涯路远
</li>
</ul>
</section>
<input type="text" id="useInput" />
<button id="useSubmit">
提交
</button>
</article>
article {
padding: 10px;
margin: 0 auto;
}
ul,
ol,
li {
list-style-type: none;
display: block;
}
#msg {
width: 500px;
margin-left: 0;
padding-left: 0;
}
#msg li {
height: 30px;
line-height: 30px;
padding-left: 30px;
border-radius: 4px;
}
#msg li:nth-child(odd) {
background: #DDDDDD;
}
#msg li:nth-child(even) {
background: #EEEEEE;
}
#useInput {
width: 500px;
font-size: 16px;
height: 30px;
line-height: 30px;
margin: 20px 0;
display: block;
border-radius: 4px;
-webkit-appearance: none;
outline: none;
-webkit-user-select: text;
user-select: text;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
background-color: transparent;
border: 1px solid rgba(0, 0, 0, .5);
}
#useSubmit {
display: block;
width: 70px;
height: 40px;
border-radius: 4px;
outline: none;
}