javascript - 使用 Isotope2 和 Scroll-js 滚动到单击的元素
问题描述
我在一个项目中使用Isotope2和Scroll-JS 。砌体布局中有许多网格项目。当用户单击网格项目时,它会扩展为全宽,我希望该项目滚动到视口的顶部。我的问题是,不是从页面内的当前位置滚动,而是从页面顶部开始滚动。我在 Codepen 中做了一个简化的案例研究。我宁愿坚持使用 Vanilla Javascript 而不是使用 jQuery。
到目前为止,这是我的 Javascript……
window._ = (...myvar) => console.log(...myvar);
const Services = {
/**
* default values for Isotope
* @type {Object}
*/
gridDefaults: {
itemSelector: '.grid-item',
percentPositions: true,
masonry: {
gutter: '.gutter-sizer',
columnWidth: '.grid-sizer'
}
},
clickedItem: null,
/**
* Initializes the module
* @return {undefined} Executive method used to plug the module in.
*/
init: () => {
_('Services module initialized');
Services.scroll = new Scroll(document.body);
const grid = document.querySelector('.grid');
const gridItems = grid.querySelectorAll('.grid-item');
gridItems.forEach( gridItem => {
gridItem.addEventListener('click', Services.Listeners.toggleExpand);
});
// call the Isotope function to process the grid element
const iso = Services.iso = new Isotope( grid, Services.gridDefaults );
iso.on('layoutComplete', Services.Listeners.scroll);
},
Listeners: {
toggleExpand: function(e){
const clickedGridItem = Services.clickedGridItem = Services.Helpers.clickedGridItem(e);
clickedGridItem.classList.toggle('grid-item--width2');
Services.iso.layout();
},
scroll: function(e) {
_(Services.clickedGridItem);
const scroll = Services.scroll;
scroll.toElement(Services.clickedGridItem, {duration: 1000});
}
},
Helpers: {
clickedGridItem: function( eve ) {
_(eve.path);
return clickedItem = eve.path.find( (el) =>
el.classList.contains('grid-item') );
}
}
};
Services.init();
这是 Scroll-JS 文档推荐的滚动到元素的内容(并且在测试中可以正常工作)
var myElement = document.body.getElementsByClassName('my-element')[0];
var scroll = new Scroll(document.body);
scroll
.toElement(myElement)
.then(function () {
// done scrolling to the element
});
解决方案
这是scroll-js开发人员的答案。
@crs1138 您的示例似乎有问题。所有网格项都是绝对定位的,并且父元素(在您的示例中)没有溢出内容。根据自述文件,您的父元素需要始终具有溢出内容。
除此之外,我怀疑其他 JS 文件中的元素正在执行某些操作,导致您的页面重绘回 0 高度。
推荐阅读
- javascript - Array.filter() 从数组中删除所有元素...有时
- react-native - 反应 setState 以更新嵌套对象的字段
- python - Django注册用户
- reactjs - 链接不能在 nextjs 中使用
- ruby-on-rails - 在使用 assert_select 的 Rails 6 集成测试中找不到特定的表行 - 总是找到标题行
- c++ - 带有最终或模板的静态多态性?
- excel - VBA Excel试图使列“非常隐藏”
- python-3.x - 我无法打开形状文件,出现错误
- excel - 有没有办法将任意数量的单元格分组到一个表格中?
- python - 捕获子进程的实时输出而不阻塞它