если неправильно указан DOM-элемент, как это узнать
$('#content').on('click' ,'#singleclick', function () {
debugger;
var product = $(this).parents('.product-block');
$('#product_name').val(product.find('.product-action .name a').text());
$('#product_price').val(product.find('.product-action .price').text());
$('#singleclick_title').text(product.find('.product-action .name a').text());
});
var links = $('.ofice a[title]').map(function(){
return $(this).attr('title');
});
var links = Array.prototype.map.call(document.querySelectorAll('.ofice a[title]'),function(el){
return el.getAttribute('title');
});
u08 buttonCounter=0;
u08 buttonHold=0;
u16 Timers[1]={0};//массив счетчиков программных таймеров
interupt HardwareTimer1(){//прерывание аппаратного таймера каждые 25мс
if(Timers[0]++==4){// 100мс/25мс=4 раза
Timers[0]=0;
onProgTimer1();
}
}
void onProgTimer1(){//этот программный таймер тикает каждые 100ms
if(button1==PRESSED){
onButton1Press();//функционал когда кнопку нажали
if(buttonCounter<30){//ждем пока счетчик досчитает до 30 - 100мс*30 раз=3000мс=3 сек
buttonCounter++;
}else{
if(buttonHold==0){
buttonHold=1;//Ставим флаг удержания кнопки
onButton1Hold();//выполняем функционал при удержании
}
}
}else{
buttonCounter=0;//сбрасываем таймер-счетчик
onButton1Release(buttonHold);//функционал когда кнопку отпустили
buttonHold=0;//сбрасываем флаг удержания кнопки
}
}
/**
*
* @param duration - продолжительность работы таймера
* @param interval - время тика таймера
* @param from - начальное значение
* @param to - конечное значение
* @param minStep - минимальный шаг вызова callback
* @param callback - обработчик
*/
function timer(duration,interval,from,to,minStep,callback){
var value=from,
forward=(from<to),
range=Math.abs(to-from),
steps=duration/interval,
step=range/steps,
last=from,
handle=setInterval(function(){
value+=step*(forward?1:-1);
if(forward?value>to:value<to){
value=to;
clearInterval(handle);
handle=null;
}
if(!minStep||!handle||Math.abs(last-value)>=minStep){
last=value;
callback(value,from,to);
}
}
,interval);
return handle;
}
timer(800,20,50,0,1,function(value){
console.warn(Math.floor(value));
})
Функционал чата таков: текстовое и видео общение. Проблема, собственно в том, что я не знаю JavaScript, а найти и впаять хороший чат не получается.
Пользователей будет около 5-10 миллионов
var test=function(){
this.enable = false;
this.protectedFunc1=function(){
console.warn('Protected func1 called!');
}
this.protectMethod=function(fn){
var self=this,
fn;
if(typeof fn!=='function'){
throw TypeError('Given thing is not a function!');
}
return function(){
console.log(self.enable);
if(!self.enable){
throw Error('Access to protected method not allowed');
}
return fn.apply(self,arguments);
};
}
this.protectedFunc1=this.protectMethod(this.protectedFunc1);
this.protectedFunc2=this.protectMethod(function(args){
console.warn('Protected func1 called!');
})
}
var obj=new test;
obj.enable=true;
obj.protectedFunc1(); //Protected func1 called!
obj.enable=false;
obj.protectedFunc1();// Error: Access to protected method not allowed
var beers=[1,{locale:'domestic'},5,6,{locale:'domestic'},0,{locale:'domestic'}];
beers.reduceBeers = function () {
var stack=[];
this.forEach(function(item,index){
if (item.locale === 'domestic') {
stack.push(item);
}
});
this.length = 0;//empty an Array;
this.push.apply(this,stack);
return this;
};
beers.reduceBeers();
beers.reduceBeers = function () {
var stack=this.filter(function(item,index){
return item.locale === 'domestic';
})
this.length = 0;//empty an Array;
this.push.apply(this,stack);
return this;
};
function myFunc(){
var el=document.getElementById('tt2'),
str=el.style.transform,
translate=(/translate\((\S+?),\s(\S+?)\)/i.exec(str)||[0,0]),
translateX=parseInt(translate[1]); //-66.6%
translateX+=33.3;
console.log(translateX);
el.style.transform = "translate(" +translateX+"%,0)";
}
<div id="tt2" class="slider">
<div><div>Digital</div><div>Brain</div><div>created</div><div>this</div></div>
</div>
<button onclick="slider.prev();">Prev</button>
<button onclick="slider.next();">Next</button>
.slider{
width:30%;
height:100px;
background-color: green;
overflow: hidden;
position: relative;
}
.slider>div{
display: inline-block;
height:100%;
white-space: nowrap;
position: relative;
width:100%;
padding: 0;
-webkit-transition: all 1s cubic-bezier(0.5, 0, 0.5, 1);
}
.slider>div>div{
display: inline-block;
width:100%;
height:100%;
text-align:center;
margin: 0;
}
function Slider(el){
var $el=(typeof el=="string")?document.getElementById(el):el,
content=$el.getElementsByTagName('div')[0],
sliders=content.getElementsByTagName('div'),
count=sliders.length,
width=content.offsetWidth,
step=width/count;
this.index=0;
function setTX(value){
content.style.transform = "translate(" +value+"%,0)";
}
this.showIndex=function(index){
console.info(index);
var max=count-1;
if(index>max){
index=0;
}else if(index<0){
index=max;
}
console.log('index=',index,max);
this.index=index;
setTX(index*(-100));
}
this.next=function(){
console.log('next');
this.showIndex(++this.index)
}
this.prev=function(){
console.log('prev');
this.showIndex(--this.index)
}
}
var slider=new Slider("tt2");