古腾堡编辑器滚动块进入视图
Gutenberg editor scroll block into view
如何将新插入的块滚动到 wordpress gutenberg 编辑器的视图中?
我正在用
创建块
const nextBlock = createBlock( 'core/paragraph' );
wp.data.dispatch( 'core/editor' ).insertBlock( nextBlock );
//scroll the block into the view
我还看到 gutenberg 使用 dom-scroll-into-view
包,例如here.
他们的文档说:
var scrollIntoView = require('dom-scroll-into-view');
scrollIntoView(source,container,config);
但是我怎样才能让它在我的情况下工作,如何获取源和容器 DOM 元素?
dom-scroll-into-view
本身就是一个 NPM 包,位于 https://github.com/yiminghe/dom-scroll-into-view
他们在 http://yiminghe.me/dom-scroll-into-view/examples/demo.html
提供了演示
他们的主要源代码是https://github.com/yiminghe/dom-scroll-into-view/blob/master/src/dom-scroll-into-view.js
简答:
source
是您要显示的 HTML 元素。
container
是它的容器元素,或者如果你没有一个特定的容器来包装你的元素,你可以简单地将它设置为 window
。
最后,config
是一个可选对象,它允许您配置一些微调,例如如果您不希望它恰好达到顶部边框,则可以在左上角留出一点边距的浏览器。您现在可以先将 {}
传递给它。
in my case, how to get the source and container DOM elements?
其实很简单..只需使用document.querySelector()
获取块节点然后wp.dom.getScrollContainer()
获取该节点的容器:
const nextBlock = wp.blocks.createBlock( 'core/paragraph' );
wp.data.dispatch( 'core/editor' ).insertBlock( nextBlock );
const source = document.querySelector( '[data-block="' + nextBlock.clientId + '"]' );
const container = wp.dom.getScrollContainer( source );
这是我的代码:
/**
* External dependencies
*/
import scrollIntoView from 'dom-scroll-into-view';
/**
* WordPress dependencies
*/
import { createBlock } from '@wordpress/blocks'; // wp.blocks.createBlock
import { dispatch } from '@wordpress/data'; // wp.data.dispatch
import { getScrollContainer } from '@wordpress/dom'; // wp.dom.getScrollContainer
function getBlockDOMNode( clientId ) {
return document.querySelector( '[data-block="' + clientId + '"]' );
}
const nextBlock = createBlock( 'core/paragraph' );
dispatch( 'core/editor' ).insertBlock( nextBlock );
const source = getBlockDOMNode( nextBlock.clientId );
const container = source ? getScrollContainer( source ) : null;
if ( source && container ) {
scrollIntoView( source, container );
}
更新
为了测试 import
ed scrollIntoView()
,试试这个:
function scrollBlockIntoView( block ) {
const source = getBlockDOMNode( block.clientId );
const container = source ? getScrollContainer( source ) : null;
if ( source && container ) {
console.log( source, container );
scrollIntoView( source, container );
}
}
window.scrollBlockIntoView = function( block ) {
scrollBlockIntoView( block || {} );
};
然后从浏览器控制台,运行 这个:
scrollBlockIntoView( wp.data.select('core/editor').getBlocks()[1] )
但请确保编辑器中至少有两个块——例如一个内容很长的段落和一个图像块。
在 Chrome (Windows 10) 上尝试和测试。
如何将新插入的块滚动到 wordpress gutenberg 编辑器的视图中?
我正在用
创建块const nextBlock = createBlock( 'core/paragraph' );
wp.data.dispatch( 'core/editor' ).insertBlock( nextBlock );
//scroll the block into the view
我还看到 gutenberg 使用 dom-scroll-into-view
包,例如here.
他们的文档说:
var scrollIntoView = require('dom-scroll-into-view');
scrollIntoView(source,container,config);
但是我怎样才能让它在我的情况下工作,如何获取源和容器 DOM 元素?
dom-scroll-into-view
本身就是一个 NPM 包,位于 https://github.com/yiminghe/dom-scroll-into-view
他们在 http://yiminghe.me/dom-scroll-into-view/examples/demo.html
提供了演示他们的主要源代码是https://github.com/yiminghe/dom-scroll-into-view/blob/master/src/dom-scroll-into-view.js
简答:
source
是您要显示的 HTML 元素。container
是它的容器元素,或者如果你没有一个特定的容器来包装你的元素,你可以简单地将它设置为window
。最后,
config
是一个可选对象,它允许您配置一些微调,例如如果您不希望它恰好达到顶部边框,则可以在左上角留出一点边距的浏览器。您现在可以先将{}
传递给它。
in my case, how to get the source and container DOM elements?
其实很简单..只需使用document.querySelector()
获取块节点然后wp.dom.getScrollContainer()
获取该节点的容器:
const nextBlock = wp.blocks.createBlock( 'core/paragraph' );
wp.data.dispatch( 'core/editor' ).insertBlock( nextBlock );
const source = document.querySelector( '[data-block="' + nextBlock.clientId + '"]' );
const container = wp.dom.getScrollContainer( source );
这是我的代码:
/**
* External dependencies
*/
import scrollIntoView from 'dom-scroll-into-view';
/**
* WordPress dependencies
*/
import { createBlock } from '@wordpress/blocks'; // wp.blocks.createBlock
import { dispatch } from '@wordpress/data'; // wp.data.dispatch
import { getScrollContainer } from '@wordpress/dom'; // wp.dom.getScrollContainer
function getBlockDOMNode( clientId ) {
return document.querySelector( '[data-block="' + clientId + '"]' );
}
const nextBlock = createBlock( 'core/paragraph' );
dispatch( 'core/editor' ).insertBlock( nextBlock );
const source = getBlockDOMNode( nextBlock.clientId );
const container = source ? getScrollContainer( source ) : null;
if ( source && container ) {
scrollIntoView( source, container );
}
更新
为了测试 import
ed scrollIntoView()
,试试这个:
function scrollBlockIntoView( block ) {
const source = getBlockDOMNode( block.clientId );
const container = source ? getScrollContainer( source ) : null;
if ( source && container ) {
console.log( source, container );
scrollIntoView( source, container );
}
}
window.scrollBlockIntoView = function( block ) {
scrollBlockIntoView( block || {} );
};
然后从浏览器控制台,运行 这个:
scrollBlockIntoView( wp.data.select('core/editor').getBlocks()[1] )
但请确保编辑器中至少有两个块——例如一个内容很长的段落和一个图像块。
在 Chrome (Windows 10) 上尝试和测试。