JS控制SVG缩放+鼠标控制事件

摘要:
话不多说,直接上代码吧,不行你砍我。。。

话不多说,直接上代码吧,不行你砍我。。。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js控制SVG缩放</title>
</head>
<body>
    <svg id="svg"style="background-color: #FAFAFA;">
        <g id="svgPanel">
            <g id="grid"></g>
            <defs>
                <path id="path1"d="M300,200 a1,1 0 0,0 100,0" />
            </defs>
            <text x="10"y="100"style="fill:green;">
                <textPath xlink:href="#path1">啦啦啦啦啦啦啦啦啦啦</textPath>
            </text>
        </g>
    </svg>
    <button onclick="zoom(1.1)">放大</button>
    <button onclick="zoom(0.9)">缩小</button>

    <script type="text/javascript">
        varsvg =document.getElementById('svg');
        varsvgPanel =document.getElementById('svgPanel');
        vargridSvg =document.getElementById('grid');
        varwidth = 800;  //设置svg整体的宽和高
        varheight = 400;
        vargridLength = 20;  //定义网格的大小
svg.setAttribute('width', width);
        svg.setAttribute('height', height);

        //绘制网格
drawGrid(gridSvg, width, height, gridLength);
        /** 绘制网络
            * @param {Object} svgBackground 绘制网格对象
            * @param {Int} winWidth 区域宽度
            * @param {Int} winHeight 区域高度
            * @param {Int} gridLength 网格大小
        */
        functiondrawGrid(svgBackground, winWidth, winHeight, gridLength) {
            varchilds =gridSvg.childNodes;
            //删除之前的网格节点,便于绘制
            for(vari =childs.length - 1; i>= 0; i--){
                svgBackground.removeChild(childs.item(i));
            }
            for(varj = 0,len =Math.ceil(winWidth /gridLength); j <len; j++){
                varattrs ={
                    x1 : j *gridLength,
                    y1 : 0,
                    x2 : j *gridLength,
                    y2 : winHeight,
                    stroke : '#add'};
                varline =resetSvg('line', attrs);
                svgBackground.appendChild(line);
            }
            for(vark = 0, len2 =Math.ceil(winHeight /gridLength); k <=len2; k++){
                varattrs2 ={
                    x1 : 0,
                    y1 : k *gridLength,
                    x2 : winWidth,
                    y2 : k *gridLength,
                    stroke : '#add'};
                varline2 =resetSvg('line', attrs2);
                svgBackground.appendChild(line2)
            }
        }
        /** js创建svg元素
            * @param {String} tag svg的标签名
            * @param {Object} svg元素的属性
        */
        functionresetSvg(tag, attrs) {
            varelement =document.createElementNS('http://www.w3.org/2000/svg', tag);
            for(varg inattrs){
                element.setAttribute(g, attrs[g])
            }
            returnelement;
        }
        /** svg缩放
            * {Float} num 收缩的倍数
        */
        varscale = 1;
        functionzoom(num) {
            scale *=num;
            svgPanel.setAttribute('transform', 'scale(' +scale + ')');
            drawGrid(gridSvg, width*(1/scale), height*(1/scale), gridLength);
        }
        //绑定鼠标滑轮
        if(document.addEventListener){
            document.addEventListener('DOMMouseScroll', scrollZoom, false);
        }
        window.onmousewheel =document.onmousewhell =scrollZoom;
        /** 滑轮滚动处理事件,向上滚动放大
        * {Object} e 事件对象
        */
        functionscrollZoom(e) {
            e =e ||window.event;
            //e.detail用来兼容FireFox
e.wheelDelta>0 ||e.detail>0?zoom(1.1):zoom(0.9);
        }
    </script>
</body>
</html>

免责声明:文章转载自《JS控制SVG缩放+鼠标控制事件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eNSP——利用三层交换机实现VLAN间路由Web后台快速开发框架(.NET Core)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js禁止微信浏览器下拉显示黑底查看网址,不影响内部Scroll

开发项目跑在微信浏览器经常会遇到一个问题,微信浏览器下拉的时候会出现自带的黑色底色(显示网址)如下图: 网上好多js禁止操作的做法禁止了内部Scroll,导致页面不能滚动,上拉加载失效,例如这种做法: $(‘body’).on(‘touchmove’, function (event) {event.preventDefault();}); or doc...

webpack3 + vue 添加 serviceWorker

新的vue脚手架已经可以自带pwa了,本文主要针对旧版的webpack。 先装三个插件: $npm i register-service-worker sw-precache-webpack-plugin webpack-pwa-manifest --save-dev 因为pwa主要用于生产,我们来动手改造 build/webpack.prod.conf....

jquery/js记录点击事件,单击次数加一,双击清零

目的:点击按钮,点击后在网页上显示点击次数,双击清零 实现:js或者jquery 代码如下: <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE HTML> <html&g...

js用button激活 Alert 元素关闭按钮的交互功能

js用button激活 Alert 元素关闭按钮的交互功能 一、总结 1、点(.)对应class,井号(#)对应id 2、jquery:amaze里面用的jquery,jquery熟悉之后,这些东西就很简单了,jquery很简单,一层一层的$().__() 二、js用button激活 Alert 元素关闭按钮的交互功能 样例 代码: 1 <div...

纯js遍历json获取值动态为select添加option

遍历json数组 并动态为select添加option 直接上代码,重要部分有注解 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="widt...

.Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇

一、前言                             经过上几篇的学习,现在我们已经掌握了ActiveX的整个开发过程,但要发挥ActiveX的真正威力,必须依靠JS。下面一起来学习吧! 二、JS调用ActiveX方法                     只需在UserControl子类中(即自定义的ActiveX控件中),编写公共方法即可...