Angular.js 实现带手柄自由调整页面大小的功能

        因为目前是处于在angular项目中,所以下面分别一个记录简易的angular.js和在angular项目中使用的版本,仅供大家参考。

Angular.js

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Resizable Element with Angular Directive</title><style>.resizable {width: 200px;height: 200px;background-color: lightgray;border: 1px solid #ccc;overflow: auto;position: relative;}.resize-handle {width: 10px;height: 10px;background-color: #000;position: absolute;bottom: 0;right: 0;cursor: nwse-resize;}</style>
</head>
<body><div ng-app="resizableApp"><div ng-controller="ResizableController"><div resizable></div></div></div><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script><script>angular.module('resizableApp', []).controller('ResizableController', function($scope) {// 可以在这里添加控制器逻辑}).directive('resizable', function() {return {restrict: 'A',link: function(scope, element) {const resizableElement = element[0];const resizeHandle = document.createElement('div');resizeHandle.classList.add('resize-handle');resizableElement.appendChild(resizeHandle);let isResizing = false;let initialX;let initialY;let originalWidth;let originalHeight;resizeHandle.addEventListener('mousedown', function(event) {event.preventDefault();isResizing = true;initialX = event.clientX;initialY = event.clientY;originalWidth = parseFloat(getComputedStyle(resizableElement, null).getPropertyValue('width'));originalHeight = parseFloat(getComputedStyle(resizableElement, null).getPropertyValue('height'));document.addEventListener('mousemove', resize);document.addEventListener('mouseup', stopResize);});function resize(event) {if (isResizing) {const width = originalWidth + (event.clientX - initialX);const height = originalHeight + (event.clientY - initialY);resizableElement.style.width = width + 'px';resizableElement.style.height = height + 'px';}}function stopResize() {isResizing = false;document.removeEventListener('mousemove', resize);document.removeEventListener('mouseup', stopResize);}}};});</script>
</body>
</html>

在Angular项目中

        在 Angular 项目中可以将上述功能作为 Angular 指令在组件中使用。

  1. 首先,创建一个名为 `resizable` 的自定义指令
    import { Directive, ElementRef, HostListener } from '@angular/core';@Directive({selector: '[resizable]'
    })
    export class ResizableDirective {private isResizing = false;private initialX: number;private initialY: number;private originalWidth: number;private originalHeight: number;constructor(private elementRef: ElementRef) {}@HostListener('document:mousemove', ['$event'])onMouseMove(event: MouseEvent) {if (this.isResizing) {const width = this.originalWidth + (event.clientX - this.initialX);const height = this.originalHeight + (event.clientY - this.initialY);this.elementRef.nativeElement.style.width = width + 'px';this.elementRef.nativeElement.style.height = height + 'px';}}@HostListener('document:mouseup')onMouseUp() {this.isResizing = false;}@HostListener('mousedown', ['$event'])onMouseDown(event: MouseEvent) {event.preventDefault();this.isResizing = true;this.initialX = event.clientX;this.initialY = event.clientY;this.originalWidth = parseFloat(getComputedStyle(this.elementRef.nativeElement).getPropertyValue('width'));this.originalHeight = parseFloat(getComputedStyle(this.elementRef.nativeElement).getPropertyValue('height'));}
    }
  2. 在组件模板中使用该指令
    <div resizable class="resizable"></div>
    
  3. 最后,将 `ResizableDirective` 添加到您的 Angular 模块中
    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { ResizableDirective } from './resizable.directive';
    import { AppComponent } from './app.component';@NgModule({declarations: [AppComponent,ResizableDirective],imports: [BrowserModule],providers: [],bootstrap: [AppComponent]
    })
    export class AppModule { }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Echarts饼图tooltip渐变色,内部legend百分比保留整数方法

业务场景&#xff1a;1、tooltip的背景需要渐变色&#xff0c;写 html 标签&#xff0c; 2、饼图内部的百分比需要保留整数 &#xff0c;使用formatter&#xff0c; export function genChartPieOption(pieData) {const res {replaceMerge: [series,], // 解决刷新之后y轴丢失…

web前端游戏项目-堆木头游戏【附源码】

web前端游戏项目-堆木头游戏 《堆木头》游戏玩法简单&#xff0c;通过鼠标点击放木头的按钮&#xff0c;叠加在一起&#xff0c;构建出各种结构。游戏适合所有年龄段的孩子&#xff0c;可以锻炼孩子的动手能力和手眼协调能力&#xff0c;激发孩子的创造力和想象力 运行效果 …

一分钟学会“沉浸式翻译”插件的安装与使用

一、安装 安装地址&#xff1a;https://immersivetranslate.com/ 选择对应的浏览器进入安装即可 二、简单的翻译使用方法 第一次安装需要先刷新界面才可以达到翻译效果 核心需要修改的地方在以下三个&#xff1a; 第一处&#xff1a;设置翻译服务&#xff0c;免费版的可以直接…

MES管理系统哪些功能帮助印刷企业提高产品质量

随着市场竞争的日益激烈&#xff0c;产品质量已经成为企业生存和发展的关键因素。对于印刷企业来说&#xff0c;产品质量不仅关系到企业的声誉&#xff0c;更直接影响到企业经济效益。因此&#xff0c;如何提高产品质量成为印刷企业亟待解决的问题。MES管理系统作为一种先进的企…

左值右值引用,完美转发

1.c98/03&#xff0c;类模板和函数模板只能含固定数量的模板参数&#xff0c;c11的新特性可以创建接受可变参数的函数模板和类模板 //Args是一个模板参数包&#xff0c;args是一个函数形参参数包 //声明一个参数包Args… args,这个参数包可以包括0到任意个模板参数 template&l…

NLP论文阅读记录 - 2022 sota | 校准序列似然改善条件语言生成

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作强化学习方法两阶段重新排名方法具有序列级损失的多任务学习 三.本文方法3.1 相似度函数3.2 校准损失3.3正则化损失3.4 候选解码方法 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.…

速盾网络:网站用速盾cdn的好处

随着互联网的快速发展&#xff0c;网站的速度和稳定性成为了用户访问体验的关键因素。为了提高网站的性能和可用性&#xff0c;许多网站开始使用CDN&#xff08;Content Delivery Network&#xff09;服务。本文将介绍CDN的基本概念、工作原理以及使用CDN的好处。一、CDN的基本…

ToB还是ToC?工业级与消费级AR眼镜都能干什么?

来源&#xff1a;虹科数字化与AR 虹科分享 | ToB还是ToC&#xff1f;工业级与消费级AR眼镜都能干什么&#xff1f; 原文链接&#xff1a;https://mp.weixin.qq.com/s/lyTASoKm29woIbfcKBtMvQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 随着科技的飞速发展&#…

gitee 怎么添加SSH密钥

要在Gitee上添加SSH密钥&#xff0c;请按照以下步骤操作&#xff1a; 登录到Gitee账户并导航到您要添加SSH密钥的存储库页面。点击页面右上方的“设置”按钮。在设置页面中&#xff0c;选择“SSH公钥”选项卡。点击“添加密钥”按钮。在弹出的对话框中&#xff0c;输入密钥标题…

智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.冠状病毒群体免疫算法4.…

【Amazon 实验③】Amazon WAF功能增强之追踪 Amazon WAF RequestID,排查误杀原因

文章目录 1. 方案介绍2. 架构图3. 操作演示 本实验将介绍如何利用 Amazon LambdaEdge&#xff0c;在 Amazon CloudFront 自定义错误页面 上展示每个由 Amazon WAF 返回的“403 Forbidden”错误的 Request ID。通过这个唯一的 WAF Request ID&#xff0c;网站运维工程师能够快速…

swing快速入门(二十四)绘画板-可调色

注释很详细&#xff0c;直接上代码 上一篇 Look here~ 听我说完再继续看更容易理解&#xff1a; 如果说用之前的绘图方法写一个绘画板你会怎么做&#xff1f;重绘会让之前的内容消失呀&#xff0c;用各种数据结构记录每个像素点的位置或颜色&#xff1f;嘶&#xff0c;感觉很麻…

HFish蜜罐搭建及简单使用

一、HFish蜜罐 HFish是一款社区型免费蜜罐&#xff0c;侧重企业安全场景&#xff0c;从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发&#xff0c;为用户提供可独立操作且实用的功能&#xff0c;通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的…

<蓝桥杯软件赛>零基础备赛20周--第11周--贪心

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上答疑&#x…

Java网络编程---TCP

服务端 import java.io.DataInputStream; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket;public class Server2 {public static void main(String[] args) throws Exception{System.out.println("------------服务端启动---------…

MySQL中EXPLAIN关键字解释

什么是MySQL的索引 索引是帮助MySQL高效获取数据的数据结构 MySQL再存储数据之外&#xff0c;数据库系统中还维护者满足特定查找算法的数据结构&#xff0c;这些数据结构以某种引用表中的数据&#xff0c;这样我们就可以通过数据结构上实现的高级查找算法来快速…

josef约瑟 DB-1电压回路断相闭锁继电器100V 5A 嵌入式安装

DB-1电压回路断相闭锁继电器 1 用途 DB-1型闭锁继电器&#xff0c;是在电压回路发生断路而可能引起继电保护误动作时&#xff0c;用以闭锁继电器。 2 结构和工作原理 DB-1型断相闭锁继电器的原理线路图见图1。 图1 DB-1原理接线图 断相闭锁继电器线路由零序电压过滤器(三个容量…

ubuntu20.04下安装pcl_ubuntu安装pcl

pcl点云数据库&#xff0c;用来进行3D信息的获取与处理&#xff0c;和opencv相比较&#xff0c;opencv是用来处理二维信息&#xff0c;他是学术界与工业界针对点云最全的库&#xff0c;且网络上相关的资料很多。以下是pcl的安装步骤以及遇到的问题。 提前说明&#xff0c;本人…

Shell三剑客:awk(格式化输出)

一、格式符 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 自动选择合适的表示法 % % 显示%自身 # [.#] 第一个数…

10分钟创建AIGC应用,腾讯云推出高性能应用服务HAI

降低AIGC应用开发门槛&#xff0c;才能更快发现下一个AIGC现象级应用。 12月18日&#xff0c;腾讯云宣布推出高性能应用服务(Hyper Application Inventor&#xff0c;HAI)&#xff0c;用户无需复杂配置&#xff0c;最快10分钟即可创建自己的AI应用。 HAI能够提供即插即用的算…