簡體   English   中英

中心元素css 3d變換

[英]center element css 3d transforms

我有一個CSS 3D轉換站點。 有3個CSS 3d定位元素,包括一些嵌套在其他3d轉換元素內部的元素。 所有轉換后的元素都在一個大的包含元素內。 容器上也有變換,並且在更大的包裝器內。 單擊轉換后的元素之一時,我希望容器進行轉換,以使單擊后的元素居中到屏幕中間。 居中后,我還希望將其放大以便占據屏幕的大部分位置

我想要的一個簡化示例: jsFiddle

區別在於這只是簡單且非動態的。 在我的情況下,元素將被放置在不同的位置以供不同的用戶使用

還有一件事: NO JQUERY!

您正在尋找的是transform: scale()

這里的工作示例: jsfiddle

只需將其添加到您的函數: scale(1.5) ,如下所示。

transformed.onclick=function(){
    if(isTransformed){
        container.style.transform='';
        container.style.webkitTransform='';
        isTransformed=false;
    }
    else{
        container.style.transform='rotateY(-70deg) scale(1.5)';
        container.style.webkitTransform='rotateY(-70deg) scale(1.5)';
        isTransformed=true;

您想要的是一些幾何圖形API,將點從一個坐標系轉換到另一個坐標系,例如“ localToGlobal”。 當前沒有像Firefox GeometryUtils api(FF> 43)這樣的用於Geometry的api。 Chrome在那里放了一些API:webkitConvertPointFromPageToNode。 我認為IE10 +支持webkitConvertPointFromPageToNode函數。

您可以看一下我的“好玩” (尚未穩定),該可用作GeometryUtils的polyfill。 這么久不使用透視圖,應該很容易。 只需將參考點(topLeft,topRight等)轉換為本地元素的父(或offsetParent)空間並創建一個矩陣:

var tx = localTopLeft;
var ty = localTopRight;
var scaleX = (localTopRight - tx) / element.offsetWidth;
var scaleY = (localBottomRight - ty) / element.offsetHeight;
var rawMatrix = [scaleX, 0, 0, scaleY, tx, ty];
element.style.transformOrigin = "0px 0px";
element.style.transform = "matrix(" + rawMatrix.join(",") + ")";

如果變得更加復雜,請嘗試使用一些“ AffineFit”算法來創建矩陣。

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM