canvas--标尺

项目开发过程中,会遇到标尺的功能,标尺可以通过canvas来实现,具体实现如下:

1、html代码:

<canvas id='canvas' width='800' height='800' />

2、css代码:

body {
    background: #eeeeee;
}
#canvas {
    background: #ffffff;
    cursor: pointer;
    margin-left: 10px;
    margin-top: 10px;
    -webkit-box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
    -moz-box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
    box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
}

3、js代码:

var canvas = document.getElementById('canvas'),
context = canvas.getContext('2d'),
AXIS_MARGIN = 0,
AXIS_ORIGIN = { x: AXIS_MARGIN, y: canvas.height-AXIS_MARGIN },
AXIS_TOP   = AXIS_MARGIN,
AXIS_RIGHT = canvas.width-AXIS_MARGIN,
HORIZONTAL_TICK_SPACING = 50,
VERTICAL_TICK_SPACING = 50,
AXIS_WIDTH  = AXIS_RIGHT - AXIS_ORIGIN.x,
AXIS_HEIGHT = AXIS_ORIGIN.y - AXIS_TOP,
NUM_VERTICAL_TICKS   = AXIS_HEIGHT / VERTICAL_TICK_SPACING,
NUM_HORIZONTAL_TICKS = AXIS_WIDTH  / HORIZONTAL_TICK_SPACING,
TICK_WIDTH = 20,
TICKS_LINEWIDTH = 0.5,
TICKS_COLOR = 'navy',
AXIS_LINEWIDTH = 1.0,
AXIS_COLOR = 'blue';
function drawAxes() {
    context.save(); 
    context.strokeStyle = AXIS_COLOR;
    context.lineWidth = AXIS_LINEWIDTH;
    drawHorizontalAxis();
    drawVerticalAxis();
    context.lineWidth = 0.5;
    context.lineWidth = TICKS_LINEWIDTH;
    context.strokeStyle = TICKS_COLOR;
    drawVerticalAxisTicks();
    drawHorizontalAxisTicks();
    context.restore();
}
function drawHorizontalAxis() {
    context.beginPath();
    context.moveTo(AXIS_ORIGIN.x, AXIS_MARGIN);
    context.lineTo(AXIS_RIGHT,    AXIS_MARGIN)
    context.closePath();
    context.stroke();
}
function drawVerticalAxis() {
    context.beginPath();
    context.moveTo(AXIS_ORIGIN.x, AXIS_MARGIN);
    context.lineTo(AXIS_ORIGIN.x, AXIS_ORIGIN.y);
    context.closePath();
    context.stroke();
}
function drawVerticalAxisTicks() {
    var deltaY;
    for (var i = 1; i < NUM_VERTICAL_TICKS; ++i) {
        context.beginPath();
        if (i % 5 === 0) {
            deltaX = TICK_WIDTH;
            context.moveTo(0, 0 + HORIZONTAL_TICK_SPACING * i);
            context.lineTo(20, 0 + HORIZONTAL_TICK_SPACING * i);
            context.textAlign = 'left';
            context.fillText(i * HORIZONTAL_TICK_SPACING, 30, 0 + HORIZONTAL_TICK_SPACING * i);
        }else {
            deltaX = TICK_WIDTH/2;
        }            
        context.moveTo(AXIS_ORIGIN.x, i * VERTICAL_TICK_SPACING);
        context.lineTo(AXIS_ORIGIN.x + deltaX, i * VERTICAL_TICK_SPACING);
        context.stroke();
    }
}
function drawHorizontalAxisTicks() {
    var deltaY;
    for (var i=1; i < NUM_HORIZONTAL_TICKS; ++i) {
        context.beginPath();
        if (i % 5 === 0) {
            deltaY = TICK_WIDTH;
            context.moveTo(0 + VERTICAL_TICK_SPACING * i, 0);
            context.lineTo(VERTICAL_TICK_SPACING * i, 20);
            context.textAlign = 'left';
            context.fillText(i * VERTICAL_TICK_SPACING, 0 + VERTICAL_TICK_SPACING * i, 30);
         }else {
            deltaY = TICK_WIDTH/2;
         }           
        context.moveTo(AXIS_ORIGIN.x + i * HORIZONTAL_TICK_SPACING, AXIS_MARGIN);
        context.lineTo(AXIS_ORIGIN.x + i * HORIZONTAL_TICK_SPACING, AXIS_MARGIN + deltaY);
        context.stroke();
    }
}
drawAxes();

4、效果:


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JS类Photoshop标尺,是一种用于在网页中创建和展示类似于Photoshop软件中的标尺功能的JavaScript类。标尺是一种用于测量和对齐元素位置的工具,有助于设计师在网页设计和布局中更加精确地操作元素。 这个JS类可以通过一些基本的JavaScript代码和CSS样式来创建和定位标尺。首先,我们需要创建一个HTML元素作为标尺的容器,并给它一个唯一的ID。然后,使用JavaScript代码获取这个容器元素,并通过CSS样式来设置标尺的外观和位置。可以使用CSS的transform和position属性来定位标尺,并设置宽度、颜色等样式属性来自定义标尺的外观。 接下来,我们需要监听鼠标事件,以便在鼠标移动时更新标尺的位置。通过监听鼠标的mousemove事件,可以获取鼠标的坐标,并将其转换为标尺上的位置。可以使用JavaScript的事件处理函数和DOM操作方法来实现这个功能。在标尺上显示鼠标的位置可以使用HTML5的canvas元素来绘制一个指示线,并在其上显示坐标数值。 除了显示鼠标位置外,这个JS类还可以实现一些其他的功能,比如拖拽标尺、测量线段的长度、标记元素的位置等。这些功能可以通过进一步扩展JS类的方法和事件处理函数来实现。 总之,JS类Photoshop标尺是一种可以用于在网页中创建和展示类似于Photoshop软件中的标尺功能的JavaScript类。它可以通过JavaScript和CSS来创建和定位标尺,并通过监听鼠标事件来更新标尺的位置。该类还可以实现其他一些功能,以增强标尺的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值