Javascript函数在调整大小时运行self
我有一个函数,我通过Javascript函数在调整大小时运行self,javascript,jquery,events,event-handling,jquery-events,Javascript,Jquery,Events,Event Handling,Jquery Events,我有一个函数,我通过$('.element').tileheightini()等元素在触发器上运行 该函数需要在窗口上运行。加载和窗口。调整大小。我想我可以在里面定义另一个函数并在那里运行它,但我想有一种方法可以使用这个来运行它自己或其他东西 我的职能: // master function for resizing tile elements $.fn.tileHeightInit = function ( args = { 'breakPoint' : breakP
$('.element').tileheightini()等元素在触发器上运行代码>
该函数需要在窗口上运行。加载和窗口。调整大小。我想我可以在里面定义另一个函数并在那里运行它,但我想有一种方法可以使用这个来运行它自己或其他东西
我的职能:
// master function for resizing tile elements
$.fn.tileHeightInit = function (
args = {
'breakPoint' : breakPoint,
'container' : container,
'squared' : squared,
'blockMargin' : blockMargin,
})
{
var breakPoint = args['breakPoint'],
container = args['container'],
squared = args['squared'],
blockMargin = args['blockMargin'];
var gridElements = $(this);
if (typeof(breakPoint)==='undefined') breakPoint = 767;
if (typeof(container)==='undefined') container = 'body';
if (typeof(squared)==='undefined') squared = true;
if (typeof(blockMargin)==='undefined') blockMargin = 30;
// return false if no elements found;
if($(container).find(gridElements).length < 1){
return false;
}
// run if window is larger than breakpoint
if($(window).width() >= breakPoint){
$(container).each(function(){
// height reset. Allows tiles to become smaller on risizing.
$(this).find(gridElements).each(function(){
$(this).height('auto');
})
// Get an array of all element heights
var elementHeights = $(this).find(gridElements).map(function() {
// block height datafield
var dataHeight = $(this).data('block-height');
// block widht datafield
var dataWidth = $(this).data('block-width');
// if squared is enabled
if(squared === true){
// if block is wider than tall, return width as height parameter for quadratic tiles
if($(this).height() < $(this).outerWidth() && dataWidth == 1){
// return height divided by data-height
return $(this).outerWidth();
} else{
// return width, since tile is wider than it's tall
return $(this).height() / dataHeight;
}
} else{
// return base height divided by block size;
return $(this).height() / dataHeight;
}
}).get();
// Math.max takes a variable number of arguments
// `apply` is equivalent to passing each height as an argument
var maxHeight = Math.max.apply(null, elementHeights);
// Set each height to the max height
$(this).find(gridElements).each(function(){
// variable for data-height attribute
var dataHeight = $(this).data('block-height');
// the missing margin the block would have had if split into more
var marginDiff = (dataHeight - 1) * blockMargin;
// set height to highest tile * data-height attribute + the margin difference between current block and surrounding blocks
$(this).height((maxHeight * dataHeight) + marginDiff);
});
})
} else{
// if smaller than breakpoint (colons collapsed)
$(container).find(gridElements).each(function(){
// reset height
$(this).height('auto');
})
}
} // END tileHeightInit();
$(window).resize(function(){
$('li').tileHeightInit({
'breakPoint': 500,
});
})
//调整磁贴元素大小的主函数
$.fn.tileheightini=函数(
args={
“断点”:断点,
“容器”:容器,
“平方”:平方,
“区块边际”:区块边际,
})
{
var breakPoint=args['breakPoint'],
container=args['container'],
平方=args['squared'],
blockMargin=args['blockMargin'];
var gridElements=$(这是);
if(typeof(breakPoint)=='undefined')断点=767;
if(typeof(container)=='undefined')container='body';
如果(typeof(squared)=='undefined')squared=true;
如果(typeof(blockMargin)==“未定义”)blockMargin=30;
//如果未找到元素,则返回false;
if($(容器).find(网格元素).length<1){
返回false;
}
//如果窗口大于断点,则运行
if($(窗口).width()>=断点){
$(容器)。每个(函数(){
//高度重置。允许瓷砖在升级时变小。
$(this).find(gridElements).each(function(){
$(this.height('auto');
})
//获取所有元素高度的数组
var elementHeights=$(this.find(gridElements.map)(function()){
//块高度数据字段
var dataHeight=$(this).data('block-height');
//块宽度数据字段
var dataWidth=$(this).data('block-width');
//如果启用了平方
如果(平方===真){
//如果块的宽度大于高度,则返回宽度作为二次平铺的高度参数
if($(this).height()<$(this).outerWidth()和&dataWidth==1){
//返回高度除以数据高度
返回$(this.outerWidth();
}否则{
//返回宽度,因为瓷砖比它的高度宽
返回$(this).height()/dataHeight;
}
}否则{
//返回基准高度除以块大小;
返回$(this).height()/dataHeight;
}
}).get();
//max接受数量可变的参数
//“apply”相当于将每个高度作为参数传递
var maxHeight=Math.max.apply(null,elementheight);
//将每个高度设置为最大高度
$(this).find(gridElements).each(function(){
//数据高度属性的变量
var dataHeight=$(this).data('block-height');
//如果将该区块分割成更多的区块,则该区块将有缺失的利润
var marginDiff=(数据高度-1)*区块保证金;
//将高度设置为最高平铺*数据高度属性+当前块和周围块之间的边距差
$(this).height((maxHeight*dataHeight)+marginDiff);
});
})
}否则{
//如果小于断点(冒号折叠)
$(容器).find(gridElements.each(函数()){
//重置高度
$(this.height('auto');
})
}
}//结束tileheightini();
$(窗口)。调整大小(函数(){
美元('li')。瓦氏重量({
“断点”:500,
});
})
基本上,我将在多个元素上运行此函数,使它们全部写入resize
,load
,并且可能会有更多事件看起来效率低下。考虑使用去盎司函数来限制函数的触发速率:$(窗口)。resize($.fn.tileheightini.bind(this))代码>内部tileHeightInit@JonasW. 或者他可以简单地将他的函数{}
转换成()=>{}
并省略绑定(这个)
部分。@JonasW。太棒了,正是我想要的!我还实现了一个去Bounce,在几秒钟内观察函数触发4000次@AnteJablanAdamović你能用()=>{}
举个例子吗?我应该改变它吗?在我定义的代码> $.fn.TiLeHeITiNIT =函数< /代码>?考虑使用DeBung函数来限制函数可以触发的速率:<代码> $(window)。调整大小($.fn.TiLeHeItInI.绑定(this));<代码>内部tileHeightInit@JonasW. 或者他可以简单地将他的函数{}
转换成()=>{}
并省略绑定(这个)
部分。@JonasW。太棒了,正是我想要的!我还实现了一个去Bounce,在几秒钟内观察函数触发4000次@AnteJablanAdamović你能用()=>{}
举个例子吗?我应该在定义$.fn.tileheightini=function
的地方更改它吗?