gpt4 book ai didi

jquery - Wookmark 插件,图像重叠问题

转载 作者:行者123 更新时间:2023-12-01 02:31:35 26 4
gpt4 key购买 nike

我正在使用 wookmark jquery 插件,除了 safari 之外,它在 PC 和 Mac 上的每个浏览器上都能正常工作,图像似乎彼此重叠。我该如何修复它?

提前致谢亚历克斯

这是插件的代码:

$.fn.wookmark = function(options) {

if(!this.wookmarkOptions) {
this.wookmarkOptions = $.extend( {
container: $('body'),
offset: 2,
autoResize: false,
itemWidth: $(this[0]).outerWidth(),
resizeDelay: 50
}, options);
} else if(options) {
this.wookmarkOptions = $.extend(this.wookmarkOptions, options);
}

// Layout variables.
if(!this.wookmarkColumns) {
this.wookmarkColumns = null;
this.wookmarkContainerWidth = null;
}

// Main layout function.
this.wookmarkLayout = function() {
// Calculate basic layout parameters.
var columnWidth = this.wookmarkOptions.itemWidth + this.wookmarkOptions.offset;
var containerWidth = this.wookmarkOptions.container.width();
var columns = Math.floor((containerWidth+this.wookmarkOptions.offset)/columnWidth);
var offset = Math.round((containerWidth - (columns*columnWidth-this.wookmarkOptions.offset))/2);

// If container and column count hasn't changed, we can only update the columns.
var bottom = 0;
if(this.wookmarkColumns != null && this.wookmarkColumns.length == columns) {
bottom = this.wookmarkLayoutColumns(columnWidth, offset);
} else {
bottom = this.wookmarkLayoutFull(columnWidth, columns, offset);
}

// Set container height to height of the grid.
this.wookmarkOptions.container.css('height', bottom+'px');
};

/**
* Perform a full layout update.
*/
this.wookmarkLayoutFull = function(columnWidth, columns, offset) {
// Prepare Array to store height of columns.
var heights = [];
while(heights.length < columns) {
heights.push(0);
}

// Store column data.
this.wookmarkColumns = [];
while(this.wookmarkColumns.length < columns) {
this.wookmarkColumns.push([]);
}

// Loop over items.
var item, top, left, i=0, k=0, length=this.length, shortest=null, shortestIndex=null, bottom = 0;
for(; i<length; i++ ) {
item = $(this[i]);

// Find the shortest column.
shortest = null;
shortestIndex = 0;
for(k=0; k<columns; k++) {
if(shortest == null || heights[k] < shortest) {
shortest = heights[k];
shortestIndex = k;
}
}

// Postion the item.
item.css({
position: 'absolute',
top: shortest+'px',
left: (shortestIndex*columnWidth + offset)+'px'
});

// Update column height.
heights[shortestIndex] = shortest + item.outerHeight() + this.wookmarkOptions.offset;
bottom = Math.max(bottom, heights[shortestIndex]);

this.wookmarkColumns[shortestIndex].push(item);
}

return bottom;
};

/**
* This layout function only updates the vertical position of the
* existing column assignments.
*/
this.wookmarkLayoutColumns = function(columnWidth, offset) {
var heights = [];
while(heights.length < this.wookmarkColumns.length) {
heights.push(0);
}

var i=0, length = this.wookmarkColumns.length, column;
var k=0, kLength, item;
var bottom = 0;
for(; i<length; i++) {
column = this.wookmarkColumns[i];
kLength = column.length;
for(k=0; k<kLength; k++) {
item = column[k];
item.css({
left: (i*columnWidth + offset)+'px',
top: heights[i]+'px'
});
heights[i] += item.outerHeight() + this.wookmarkOptions.offset;

bottom = Math.max(bottom, heights[i]);
}
}

return bottom;
};

// Listen to resize event if requested.
this.wookmarkResizeTimer = null;
if(!this.wookmarkResizeMethod) {
this.wookmarkResizeMethod = null;
}
if(this.wookmarkOptions.autoResize) {
// This timer ensures that layout is not continuously called as window is being dragged.
this.wookmarkOnResize = function(event) {
if(this.wookmarkResizeTimer) {
clearTimeout(this.wookmarkResizeTimer);
}
this.wookmarkResizeTimer = setTimeout($.proxy(this.wookmarkLayout, this), this.wookmarkOptions.resizeDelay)
};

// Bind event listener.
if(!this.wookmarkResizeMethod) {
this.wookmarkResizeMethod = $.proxy(this.wookmarkOnResize, this);
}
$(window).resize(this.wookmarkResizeMethod);
};

/**
* Clear event listeners and time outs.
*/
this.wookmarkClear = function() {
if(this.wookmarkResizeTimer) {
clearTimeout(this.wookmarkResizeTimer);
this.wookmarkResizeTimer = null;
}
if(this.wookmarkResizeMethod) {
$(window).unbind('resize', this.wookmarkResizeMethod);
}
};

// Apply layout
this.wookmarkLayout();

// Display items (if hidden).
this.show();
};

最佳答案

迟到了,但对于 future 遇到问题的开发人员来说,这可以帮助您......

如果图像加载速度缓慢,可能会导致 Wookmark 出现元素大小调整问题。解决此问题的一种简单方法是重新调用处理程序,如上面的 byroncorrales 所示。然而,这样做并不能确保所有内容都已加载。我们想要等待 DOM 完全加载,然后再次调用处理程序。

所以最后添加这个简单的 jQuery 片段。

$(window).load(function() {
handler.wookmark(options);
});

关于jquery - Wookmark 插件,图像重叠问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com