Шаблон для своей jQuery
Шаблон для своей jQuery:
function $(s){ return new Q(document.querySelectorAll(s)); }
function Q(x){
this.x = x;
this.toggle = function(v, c){
for(var i = 0; i < this.x.length; i++){
this.x[i].addEventListener(v, function(){
this.classList.toggle(c);
});
}
return this;
}
}
Используется так:
$('.class').toggle('click', 'class-active');
Остается только добавить методов. Например:
this.on = function(v, f){
for(var i = 0; i < this.x.length; i++){
this.x[i].addEventListener(v, f);
}
return this;
}
Теперь можно использовать так:
$('.class').toggle('click', 'class-active').on('click', function(){alert('1');});
:) |
|
рони,
Ничеси, надо разобраться) |
Rise,
Спасибо за подсказку. Попробую переделать через прототипы и еще поизучаю вашу библиотеку на предмет каких-то идей. Еще я думаю, тут есть проблема с циклами, которые будут все время копироваться, почти в каждом методе, что не очень круто. И, наверно, не лучшая кроссбраузерность. Хотя последний фактор меня пока трогает мало. |
Rise,
а какой паттерн в твоей либе? |
Цитата:
|
Rise,
Design Pattern |
Перенести методы в прототип оказалось просто:
Шаблон:
function $(selector){ return new Q(document.querySelectorAll(selector)); }
class Q {
constructor(selector){ this.selector = selector; }
toggle(event, newSelect){
for(var i = 0; i < this.selector.length; i++){
this.selector[i].addEventListener(event, function(){
this.classList.toggle(newSelect);
});
}
return this;
}
}
Как использовать:
$('#wrapper .class').toggle('click', 'class-active');
А вот избавиться от циклов пока не получается. Как думаете вообще, можно ли такой подход уже использовать где-нибудь на личном проекте? Или тут еще есть серьезные дефекты? |
Цитата:
|
void(),
вынос цикла в отдельный метод ... может кто-то предложит свой вариант ...
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.hot.class-active{
background-color: #3366FF;
}
.red {
background-color: #FF0000;
}
.hot{
border: 1px dashed Gray; padding: 5px; height: 100px; width: 100px;
}
</style>
</head>
<body> <style type="text/css">
</style>
<div class="hot">test</div>
<div class="hot red">test</div>
<div class="hot">test</div>
<script>
"use strict"
function $(selector){ return new Q(document.querySelectorAll(selector)); }
class Q {
constructor(selector){ this.selector = selector; }
toggleClass(newSelect,event) {
var fn = function() {
this.classList.toggle(newSelect)
};
return this.forEach(fn, event)
};
forEach(fn, event) {
[].forEach.call(this.selector, function(item) {
event ? item.addEventListener(event, fn.bind(item)) : fn.bind(item)()
});
return this
};
css(data, event) {
var fn = function() {
var item = this;
Object.keys(data).forEach(function(key) {
item.style[key] = data[key]
})
};
return this.forEach(fn, event)
};
}
$('.hot').toggleClass('red').css({"color" : "#66FF00", width : "200px"}).toggleClass('class-active','click');
</script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 02:25. |