精华内容
下载资源
问答
  • 44 Three.js拉伸几何体THREE.ExtrudeGeometry

    千次阅读 2017-12-19 00:21:05
    拉伸几何体是什么 拉伸是指我们有一个二维图形,通过针对这个二维图形进行z轴拉伸,将它转换成三维图形。例如,如果我们拉伸THREE.CircleGeometry,就会得到一个类似圆柱体的图形;如果我们拉伸THREE.PlaneGeometry...

    拉伸几何体是什么

    拉伸是指我们有一个二维图形,通过针对这个二维图形进行z轴拉伸,将它转换成三维图形。例如,如果我们拉伸THREE.CircleGeometry,就会得到一个类似圆柱体的图形;如果我们拉伸THREE.PlaneGeometry,就会得到一个立方体。下面我们介绍一下常用的THREE.ExtrudeGeometry

    THREE.ExtrudeGeometry简介

    THREE.ExtrudeGeometry可以从一个二维图形创建出一个三维图形。

    简单使用

    var geometry = new THREE.ExtrudeGeometry(shapes, options);
    • shapes拉伸几何体需要提供一个或多个图形(THREE.Shape对象)。请看上一节
    • options就是一写可以配置THREE.ExtrudeGeometry配置项,相关配置有:
    属性是否必需描述
    amount该属性指定图形可以拉多高(深度)。默认值为100
    bevelThickness该属性指定斜角的深度。斜角是前后面和拉伸体之间的倒角。该值定义斜角进入图形的深度。默认值为6
    bevelSize该属性指定斜角的高度。这个高度将被加到图形的正常高度上。默认值为bevelThickness - 2
    bevelSegments该属性定义斜角的分段数。分段数越多,曲线越平滑。默认值为3
    bevelEnabled如果这个属性设为true,就会有斜角。默认值为true
    curveSegments该属性指定拉伸体沿深度方向分成多少段。默认值为1。值越大,单个面越多
    steps该属性指定拉伸体沿深度方向分成多少段。默认值为1。值越大,单个面越多。
    extrudePath该属性指定图形沿着什么路径(THREE.CurvePath)拉伸。如果没有指定,则图形沿着z轴拉伸
    material该属性定义的是前后面所用的材质的索引。如果想给前后面使用单独的材质,可以使用THREE.SceneUtils.createMultiMaterialObject函数来创建网格
    extrudeMaterial该属性指定斜角和拉伸体所用材质的索引。如果想给前后面使用单独的材质,可以使用THREE.SceneUtils.createMultiMaterialObject函数来创建网格
    uvGenerator当你给材质使用纹理时,UV映射确定纹理的哪一部分用于特定的面。使用UVGenerator属性,你可以传入自己的对象,该对象将为传入的图形创建的面创建UV设置。如果没有指定,则使用THREE.ExtrudeGeometry.WorldUVGenerator
    framesfrenet框架用于样条曲线的切线、法线和副法线。在沿extrude path拉伸几何体时会用到这个属性。你不需要指定它,因为Three.js提供了实现途径—THREE.TubeGeometry.FrenetFrames,它也被用作默认值。

    案例代码

    这里写图片描述
    全部代码为下面的,可以自己copy下来跑一下

    案例查看地址:http://www.wjceo.com/blog/threejs/2018-02-12/46.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            html, body {
                margin: 0;
                height: 100%;
            }
    
            canvas {
                display: block;
            }
    
        </style>
    </head>
    <body onload="draw();">
    
    </body>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/three.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/controls/OrbitControls.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/libs/stats.min.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/libs/dat.gui.min.js"></script>
    <script>
        var renderer;
        function initRender() {
            renderer = new THREE.WebGLRenderer({antialias:true});
            renderer.setSize(window.innerWidth, window.innerHeight);
            document.body.appendChild(renderer.domElement);
        }
    
        var camera;
        function initCamera() {
            camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000);
            camera.position.set(0, 0, 100);
        }
    
        var scene;
        function initScene() {
            scene = new THREE.Scene();
        }
    
        var light;
        function initLight() {
            scene.add(new THREE.AmbientLight(0x404040));
    
            light = new THREE.DirectionalLight(0xffffff);
            light.position.set(1,1,1);
            scene.add(light);
        }
    
        //生成2d图形
        function drawShape() {
    
            // 实例化shape对象
            var shape = new THREE.Shape();
    
            // 设置开始点的位置
            shape.moveTo(20, 10);
    
            // 从起始点绘制直线到当前位置
            shape.lineTo(20, 40);
    
            //设置一条曲线到30 40
            shape.bezierCurveTo(15, 25, -5, 25, -20, 40);
    
            // 设置一条通过当前所有顶点的光滑曲线
            shape.splineThru(
                [
                    new THREE.Vector2(-22, 30),
                    new THREE.Vector2(-18, 20),
                    new THREE.Vector2(-20, 10)
                ]
            );
    
            // 设置曲线回到顶点
            shape.quadraticCurveTo(0, -15, 20, 10);
    
            // 添加第一个眼
            var hole1 = new THREE.Path();
            hole1.absellipse(6, 20, 2, 3, 0, Math.PI * 2, true);
            shape.holes.push(hole1);
    
            // 添加第二个眼
            var hole2 = new THREE.Path();
            hole2.absellipse(-10, 20, 2, 3, 0, Math.PI * 2, true);
            shape.holes.push(hole2);
    
            // 添加嘴巴,一半的圆
            var hole3 = new THREE.Path();
            hole3.absarc(0, 5, 2, 0, Math.PI, true);
            shape.holes.push(hole3);
    
            // 返回shape
            return shape;
        }
    
        //生成模型
        function createMesh(geom) {
    
            //设置当前的模型矩阵沿y轴负方向偏移20
            geom.applyMatrix(new THREE.Matrix4().makeTranslation(0, -20, 0));
    
            // 创建法向量纹理
            var meshMaterial = new THREE.MeshNormalMaterial({
                flatShading: THREE.FlatShading,
                transparent: true,
                opacity: 0.7
            });
    
            //  创建一个线框纹理
            var wireFrameMat = new THREE.MeshBasicMaterial();
            wireFrameMat.wireframe = true;
    
            // 创建模型
            var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial,wireFrameMat]);
    
            return mesh;
        }
    
        //初始化性能插件
        var stats;
        function initStats() {
            stats = new Stats();
            document.body.appendChild(stats.dom);
        }
    
        //用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放
        var controls;
        function initControls() {
    
            controls = new THREE.OrbitControls( camera, renderer.domElement );
    
            // 如果使用animate方法时,将此函数删除
            //controls.addEventListener( 'change', render );
            // 使动画循环使用时阻尼或自转 意思是否有惯性
            controls.enableDamping = true;
            //动态阻尼系数 就是鼠标拖拽旋转灵敏度
            //controls.dampingFactor = 0.25;
            //是否可以缩放
            controls.enableZoom = true;
            //是否自动旋转
            controls.autoRotate = false;
            //设置相机距离原点的最远距离
            controls.minDistance  = 20;
            //设置相机距离原点的最远距离
            controls.maxDistance  = 160;
            //是否开启右键拖拽
            controls.enablePan = true;
        }
    
        //生成gui设置配置项
        var gui,shape;
        function initGui() {
            //声明一个保存需求修改的相关数据的对象
            gui = {
                amount:2,
                bevelThickness:2,
                bevelSize:0.5,
                bevelEnabled:true,
                bevelSegments:3,
                curveSegments:12,
                steps:1,
                asGeom:function () {
                    // 删除旧的模型
                    scene.remove(shape);
                    // 创建一个新的
                    var options = {
                        amount: gui.amount,
                        bevelThickness: gui.bevelThickness,
                        bevelSize: gui.bevelSize,
                        bevelSegments: gui.bevelSegments,
                        bevelEnabled: gui.bevelEnabled,
                        curveSegments: gui.curveSegments,
                        steps: gui.steps
                    };
    
                    shape = createMesh(new THREE.ExtrudeGeometry(drawShape(), options));
                    // 将模型添加到场景当中
                    scene.add(shape);
                }
            };
            var datGui = new dat.GUI();
            //将设置属性添加到gui当中,gui.add(对象,属性,最小值,最大值)
            datGui.add(gui, 'amount', 0, 20).onChange(gui.asGeom);
            datGui.add(gui, 'bevelThickness', 0, 10).onChange(gui.asGeom);
            datGui.add(gui, 'bevelSize', 0, 10).onChange(gui.asGeom);
            datGui.add(gui, 'bevelSegments', 0, 30).step(1).onChange(gui.asGeom);
            datGui.add(gui, 'bevelEnabled').onChange(gui.asGeom);
            datGui.add(gui, 'curveSegments', 1, 30).step(1).onChange(gui.asGeom);
            datGui.add(gui, 'steps', 1, 5).step(1).onChange(gui.asGeom);
    
            //调用生成一次图形
            gui.asGeom();
        }
    
        function render() {
            renderer.render( scene, camera );
        }
    
        //窗口变动触发的函数
        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            render();
            renderer.setSize( window.innerWidth, window.innerHeight );
    
        }
    
        function animate() {
            //更新控制器
            controls.update();
            render();
    
            //更新性能插件
            stats.update();
            requestAnimationFrame(animate);
        }
    
        function draw() {
            initRender();
            initScene();
            initCamera();
            initLight();
            //initModel();
            initControls();
            initStats();
            initGui();
    
            animate();
            window.onresize = onWindowResize;
        }
    </script>
    </html>
    展开全文
  • Three.js拉伸扫描成型ExtrudeGeometry

    千次阅读 2019-11-30 11:26:07
    本文是Three.js电子书的7.8节 构造函数ExtrudeGeometry()和ShapeGeometry一样是利用Shape对象生成几何体对象,区别在于ExtrudeGeometry()可以利用2D轮廓生成3D模型, 如果你使用任何三维软件都知道可以先绘制一个二...

    拉伸扫描成型ExtrudeGeometry

    本文是Three.js电子书的7.8节

    在这里插入图片描述

    构造函数ExtrudeGeometry()ShapeGeometry一样是利用Shape对象生成几何体对象,区别在于ExtrudeGeometry()可以利用2D轮廓生成3D模型, 如果你使用任何三维软件都知道可以先绘制一个二维的轮廓图,然后拉伸成型得到三维模型。ExtrudeGeometry()第二个参数是拉伸参数,数据类型是对象, 属性amount表示拉伸长度,bevelEnabled表示拉伸是否产生倒角,其它参数见下表。

    构造函数ExtrudeGeometry()拉伸参数

    参数含义
    amount拉伸长度,默认100
    bevelEnabled是否使用倒角
    bevelSegments倒角细分数,默认3
    bevelThickness倒角尺寸(经向)
    curveSegments拉伸轮廓细分数
    steps拉伸方向细分数
    extrudePath扫描路径THREE.CurvePath,默认Z轴方向
    material前后面材质索引号
    extrudeMaterial拉伸面、倒角面材质索引号
    bevelSize倒角尺寸(拉伸方向)
    /**
     * 创建拉伸网格模型
     */
    var shape = new THREE.Shape();
    /**四条直线绘制一个矩形轮廓*/
    shape.moveTo(0,0);//起点
    shape.lineTo(0,100);//第2点
    shape.lineTo(100,100);//第3点
    shape.lineTo(100,0);//第4点
    shape.lineTo(0,0);//第5点
    var geometry = new THREE.ExtrudeGeometry(//拉伸造型
        shape,//二维轮廓
        //拉伸参数
        {
            amount:120,//拉伸长度
            bevelEnabled:false//无倒角
        }
        );
    

    通过使用点模式渲染上面的几何体,可以看出几何体拉伸的本质效果就是空间分布顶点数据的产生。

    var material=new THREE.PointsMaterial({
        color:0x0000ff,
        size:5.0//点对象像素尺寸
    });//材质对象
    var mesh=new THREE.Points(geometry,material);//点模型对象
    scene.add(mesh);//点模型添加到场景中
    

    扫描

    在这里插入图片描述

    拉伸和扫描一样都是三维造型建模方法,three.js提供了一个共同的构造函数来实现扫描和拉伸,对于扫描而言不需要定义amount属性设置拉伸距离,设置扫描路径即可, 定义属性extrudePathextrudePath的值是路径THREE.CurvePath,可以通过样条曲线、贝赛尔曲线构造函数创建不规则曲线扫描轨迹。

    /**
    * 创建扫描网格模型
    */
    var shape = new THREE.Shape();
    /**四条直线绘制一个矩形轮廓*/
    shape.moveTo(0,0);//起点
    shape.lineTo(0,10);//第2点
    shape.lineTo(10,10);//第3点
    shape.lineTo(10,0);//第4点
    shape.lineTo(0,0);//第5点
    /**创建轮廓的扫描轨迹(3D样条曲线)*/
    var curve = new THREE.SplineCurve3([
       new THREE.Vector3( -10, -50, -50 ),
       new THREE.Vector3( 10, 0, 0 ),
       new THREE.Vector3( 8, 50, 50 ),
       new THREE.Vector3( -5, 0, 100)
    ]);
    var geometry = new THREE.ExtrudeGeometry(//拉伸造型
       shape,//二维轮廓
       //拉伸参数
       {
           bevelEnabled:false,//无倒角
           extrudePath:curve,//选择扫描轨迹
           steps:50//扫描方向细分数
       }
    );
    
    展开全文
  • 45 Three.js拉伸几何体THREE.TubeGeometry

    千次阅读 2017-12-20 00:03:11
    THREE.TubeGeometry可以沿着一条三维的样式曲线(THREE.CatmullRomCurve3对象)拉伸出一根管。 最简单实现 var tubeGeometry = new THREE.TubeGeometry(path,segments,radius,radiusSegments,closed); 相关...

    简介

    THREE.TubeGeometry可以沿着一条三维的样式曲线(THREE.CatmullRomCurve3对象)拉伸出一根管。

    最简单实现

    var tubeGeometry = new THREE.TubeGeometry(path,segments,radius,radiusSegments,closed);

    相关参数说明

    属性是否必需描述
    path该属性用一个THREE.CatmullRomCurve3对象来指定THREE.TubeGeometry对象应当遵循的路径
    segments该属性指定构建这个THREE.TubeGeometry对象所用的分段数。默认值为64。路径越长,指定的分段数应该越多
    radius该属性指定THREE.TubeGeometry对象的半径。默认值为1
    radiusSegments该属性指定THREE.TubeGeometry对象圆周的分段数。默认值为8。分段数越多,越圆滑
    colosed如果该属性设为true,THREE.TubeGeometry头和尾部会连接起来。默认值为false。

    案例代码

    这里写图片描述

    案例查看地址:http://www.wjceo.com/blog/threejs/2018-02-12/47.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            html, body {
                margin: 0;
                height: 100%;
            }
    
            canvas {
                display: block;
            }
    
        </style>
    </head>
    <body onload="draw();">
    
    </body>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/three.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/QuickHull.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/geometries/ConvexGeometry.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/controls/OrbitControls.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/libs/stats.min.js"></script>
    <script src="https://johnson2heng.github.io/three.js-demo/lib/js/libs/dat.gui.min.js"></script>
    <script>
        var renderer;
        function initRender() {
            renderer = new THREE.WebGLRenderer({antialias:true});
            renderer.setSize(window.innerWidth, window.innerHeight);
            document.body.appendChild(renderer.domElement);
        }
    
        var camera;
        function initCamera() {
            camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000);
            camera.position.set(0, 0, 100);
        }
    
        var scene;
        function initScene() {
            scene = new THREE.Scene();
        }
    
        var light;
        function initLight() {
            scene.add(new THREE.AmbientLight(0x404040));
    
            light = new THREE.DirectionalLight(0xffffff);
            light.position.set(1,1,1);
            scene.add(light);
        }
    
        function initModel() {
            var shape = new THREE.ShapeGeometry(drawShape());
            var material = new THREE.MeshPhongMaterial({color:0xff00ff});
            material.side = THREE.DoubleSide;//设置成两面都可见
            var mesh = new THREE.Mesh(shape,material);
            scene.add(mesh);
            /*此方法是创建两种纹理的方法
            * var shape = new THREE.ShapeGeometry(drawShape());
            var mesh = createMesh(shape);
            scene.add(mesh);
            * */
        }
    
        //初始化性能插件
        var stats;
        function initStats() {
            stats = new Stats();
            document.body.appendChild(stats.dom);
        }
    
        //用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放
        var controls;
        function initControls() {
    
            controls = new THREE.OrbitControls( camera, renderer.domElement );
    
            // 如果使用animate方法时,将此函数删除
            //controls.addEventListener( 'change', render );
            // 使动画循环使用时阻尼或自转 意思是否有惯性
            controls.enableDamping = true;
            //动态阻尼系数 就是鼠标拖拽旋转灵敏度
            //controls.dampingFactor = 0.25;
            //是否可以缩放
            controls.enableZoom = true;
            //是否自动旋转
            controls.autoRotate = false;
            //设置相机距离原点的最远距离
            controls.minDistance  = 20;
            //设置相机距离原点的最远距离
            controls.maxDistance  = 160;
            //是否开启右键拖拽
            controls.enablePan = true;
        }
    
        //生成gui设置配置项
        var gui,spGroup,tubeMesh;
        function initGui() {
            //声明一个保存需求修改的相关数据的对象
            gui = {
                numberOfPoints:5,
                segments:64,
                radius:1,
                radiusSegments:8,
                closed:false,
                points: [],
                newPoints:function () {
                    //生成一些随机点放置到数组当中
                    var points = [];
                    for (var i = 0; i < gui.numberOfPoints; i++) {
                        var randomX = -20 + Math.round(Math.random() * 50);
                        var randomY = -15 + Math.round(Math.random() * 40);
                        var randomZ = -20 + Math.round(Math.random() * 40);
    
                        points.push(new THREE.Vector3(randomX, randomY, randomZ));
                    }
                    gui.points = points;
                    gui.redraw();
                },
                redraw:function () {
                    //清楚掉场景中原来的模型对象
                    scene.remove(spGroup);
                    scene.remove(tubeMesh);
                    //重新绘制模型
                    generatePoints(gui.points, gui.segments, gui.radius, gui.radiusSegments, gui.closed);
                }
            };
            var datGui = new dat.GUI();
            //将设置属性添加到gui当中,gui.add(对象,属性,最小值,最大值)
            datGui.add(gui, 'newPoints');
            datGui.add(gui, 'numberOfPoints', 2, 15).step(1).onChange(gui.newPoints);
            datGui.add(gui, 'segments', 0, 200).step(1).onChange(gui.redraw);
            datGui.add(gui, 'radius', 0, 10).onChange(gui.redraw);
            datGui.add(gui, 'radiusSegments', 0, 100).step(1).onChange(gui.redraw);
            datGui.add(gui, 'closed').onChange(gui.redraw);
    
    
            gui.newPoints();
        }
    
        //通过配置项绘制出几何体
        function generatePoints(points, segments, radius, radiusSegments, closed) {
            spGroup = new THREE.Object3D(); //赋值spGroup存储模型点的3d对象
            var material = new THREE.MeshBasicMaterial({color: 0xff0000, transparent: false}); //声明一个红色普通纹理
            //将所有的顶点创建出球形存储到spGroup内
            points.forEach(function (point) {
    
                var spGeom = new THREE.SphereGeometry(0.2);
                var spMesh = new THREE.Mesh(spGeom, material);
                spMesh.position.copy(point);
                spGroup.add(spMesh);
            });
            // 将spGroup对象添加到场景当中
            scene.add(spGroup);
    
            // THREE.CatmullRomCurve3方法可以将一组顶点生成一条平滑的曲线
            var tubeGeometry = new THREE.TubeGeometry(new THREE.CatmullRomCurve3(points), segments, radius, radiusSegments, closed);
            //将模型对象赋值给tubeMesh并添加到场景当中
            tubeMesh = createMesh(tubeGeometry);
            scene.add(tubeMesh);
        }
    
        function createMesh(geom) {
    
            // 创建两个纹理
            //创建一个透明纹理
            var meshMaterial = new THREE.MeshBasicMaterial({color: 0x00ff00, transparent: true, opacity: 0.3});
    
            //创建一个线框纹理
            var wireFrameMat = new THREE.MeshBasicMaterial();
            wireFrameMat.wireframe = true;
    
            // 使用纹理和几何体创建模型
            var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial, wireFrameMat]);
    
            return mesh;
        }
    
        function render() {
            renderer.render( scene, camera );
        }
    
        //窗口变动触发的函数
        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            render();
            renderer.setSize( window.innerWidth, window.innerHeight );
    
        }
    
        function animate() {
            //更新控制器
            controls.update();
            render();
    
            //更新性能插件
            stats.update();
            requestAnimationFrame(animate);
        }
    
        function draw() {
            initRender();
            initScene();
            initCamera();
            initLight();
            //initModel();
            initControls();
            initStats();
            initGui();
    
            animate();
            window.onresize = onWindowResize;
        }
    </script>
    </html>
    展开全文
  • 前言相信大家在日常的web开发中,作为前端经常会遇到处理图片拉伸问题的情况。例如banner、图文列表、头像等所有和用户或客户自主操作图片上传的地方,而一旦牵扯图片,就会涉及到图片拉伸的问题,当然,在图片上传...

    前言

    相信大家在日常的web开发中,作为前端经常会遇到处理图片拉伸问题的情况。

    例如banner、图文列表、头像等所有和用户或客户自主操作图片上传的地方,而一旦牵扯图片,就会涉及到图片拉伸的问题,当然,在图片上传时做手动裁切,让用户或客户清晰的感知到图片的有效内容才是最优的解决方案,但是在其他各种外在因素下,没有做裁切的话,就需要在前端显示上做处理了,满足在上传任意大小图片的情况下,最优显示效果的需求。

    这时我们需要考虑到极端效果,如下图:

    63c5c3394bfc604bd12b62ac1097d0fe.png

    而我们想要得到的效果是这样的------

    9bbdb1744af22883130073debd1a899c.png

    把图片放进框框,要几步?三步...我们开始

    第一步:先画个框框 (这里顺便安利一种自适应框框的方法)

    // 假定需要一个在750px屏幕下宽400px,高280px的盒子

    // 宽度 = 400 / 750 = 0.5333

    // 高度 = 280 / 400 * 0.5333 = 0.3733

    .img-box{

    position: relative;

    width: 53.33%;

    height: 0;

    padding-bottom: 37.33%;

    overflow: hidden;

    background-color: #eee;

    }

    ...

    第二步:设置图片需要使用到的css

    .width{

    position: absolute !important;

    width: 100% !important;

    min-height: 100% !important;

    top: 50% !important;

    transform: translateY(-50%) !important;

    -ms-transform: translateY(-50%) !important;

    -moz-transform: translateY(-50%) !important;

    -webkit-transform: translateY(-50%) !important;

    -o-transform: translateY(-50%) !important;

    display: block;

    }

    .height{

    position: absolute !important;

    height: 100% !important;

    min-width: 100% !important;

    left: 50% !important;

    transform: translateX(-50%) !important;

    -ms-transform: translateX(-50%) !important;

    -moz-transform: translateX(-50%) !important;

    -webkit-transform: translateX(-50%) !important;

    -o-transform: translateX(-50%) !important;

    display: block;

    }

    第三步:js获取图片高度比较并给img添加类名

    //需要注意的是,不能在css中直接给img设置宽度和高度

    //否则在img.onload后获取的宽高是css设置的宽高

    //同时建议使用dom对象来获取img标签

    var list = document.getElementById('list');

    getImgWH ( list );

    //执行宽高比对并设置img类名

    function getImgWH ( Obj ) {

    var img = Obj.getElementsByTagName('img');

    for( var i=0 ; i

    img[i].onload = function(){

    var width = this.width;

    var height = this.height;

    if ( width > height ) {

    this.classList.add('height');

    } else if ( width < height ) {

    this.classList.add('width');

    } else {

    this.style.width = '100%';

    this.style.height = '100%';

    }

    }

    }

    }

    图片防止拉伸处理比较简单,但是在实际项目中需要得到足够的重视,一个web页面成也图片,败也图片,拉伸了图片就等着设计师的磨叽吧,哈哈哈哈...

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    展开全文
  • Js图片拉伸拖拽

    2014-07-21 13:22:27
    Js图片拉伸拖拽 图片收缩 解压密码:www.ahbc.com.cn
  • js 图片拉伸缩放,DIV拉伸

    千次阅读 2017-07-25 19:07:18
    <script src="js/jquery-3.2.1.min.js"> <script type="text/javascript"> $(".editor").click(function(e){ if($(e.target)[0].tagName != "IMG") { $(".kx_border_img_stretch").css({...
  • 介绍了js实现拉伸拖动iframe的具体代码,有需要的朋友可以参考一下
  • 这是一款JS实现的纵向拉伸变横向拉伸,动感伸缩菜单,紧身排列的CSS菜单,可用在博客等重要的位置部分作菜单,学习JavaScript前端设计的也可以作为参考范例。 运行效果截图如下: 在线演示地址如下: ...
  • 主要给大家介绍了关于利用Javascript防止图片拉伸的自适应处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 使用JavaScript解决网页图片拉伸问题

    千次阅读 2016-11-08 18:30:10
    开发网页的过程中经常会因为图片的拉伸问题而苦恼,这里就将介绍如何通过JS来动态的处理网页图片尺寸的问题,让网页不再存在拉伸的图片,让网站更加美观
  • 在web开发中,作为前端经常会遇到处理图片拉伸问题的情况。例如banner、图文列表、头像等所有和用户或客户自主操作图片上传的地方,而一旦牵扯图片,就会涉及到图片拉伸的问题,当然,在图片上传时做手动裁切,让...
  • js拉伸表格

    2018-04-18 11:33:00
    <script type="text/javascript"> var tTD; //用来存储当前更改宽度的Table Cell,避免快速移动鼠标的问题 var table = document.getElementById("tb_3"); console.log(table.rows[0].cells) for (j = 0; j [0]....
  • 本文给大家介绍使用javascript解决网页图片拉伸问题,本文给大家介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
  • js实现盒子的拉伸

    千次阅读 2016-10-13 19:15:02
    拉伸盒子  前面我们实现了将一个盒子就行移动(拖拽),在这里我们将对盒子本身的大小进行操作,将盒子拉宽或者拉高。首先我们也是布局,给出一个盒子。 *{margin: 0;padding: 0;border: none;} ...
  • js实现拉伸拖动iframe

    千次阅读 2013-05-20 19:15:24
    <script language="javascript">   var mouseX = 0;   var mouseY = 0;  var w=5;   function divonmousemove(){   obj1=document.getElementById("a");  obj2=document.getElementById("b");...
  • JavaScript表格头部拉伸

    2020-05-09 17:38:32
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> #carTable{width:100%;...table id="carTabl.
  • js 图片拉伸实例

    千次阅读 2012-02-27 19:59:59
    <script language="javascript" type="text/javascript"> //定义要移动的距离 var h=0; var maxheight=300; var st; var top=document.getElementById("top"); //初始时,设置top为隐藏状态 top.style...
  • } JS 重点 var original_h = $('#footerSlideContent').height(); // 先拿取高度 $('#footerSlideContent').height(0); // 隐藏整个 Content $('#showFooter').click(function(){ $('#footerSlideContent').animate...
  • js表格列拉伸

    2019-06-26 21:21:14
    表格列拉伸 通过监听鼠标事件实现 重点是通过鼠标位置与元素边框距离判断鼠标在表格边框 之后只要生成一条跟随鼠标位置的新边框 并在鼠标mouseup事件是改变边框宽度即可 ...
  • 在vue中使用three.js的svg拉伸体的转换函数transformSVGPathExposed
  • js设置图片不拉伸

    千次阅读 2015-05-25 18:11:05
    /** * 设置图片大小并且不拉伸 * @param ImgD * @param width * @param height * @constructor */function DrawImage(ImgD,width,height){ var image=new Image(); image.src=ImgD.src; if(image.width>0 && image....
  • JS实现div宽度、高度拉伸

    千次阅读 2019-09-09 15:16:37
    一、JavaScript实现宽度高度自动缓慢拉伸 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style type="text/css"> #testDiv { width: 200px; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,659
精华内容 5,063
关键字:

js拉伸