`
lyang0000
  • 浏览: 26607 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

某公司的一道js面试题

    博客分类:
  • W3C
阅读更多
<html>
<head>
	<title>drag example</title>
<style>
	*{
		margin:0;
		padding:0;
	}
	body{
		text-align:center;
	}
	.mil{
		text-align:center;
		line-height:96px;
	}

</style>
</head>
<body>
	<div id="main" style="position:relative;margin:0 auto;width:500px;height:500px;border:1px solid red;">
		
	</div>
</body>
</html>
<script type="text/javascript">

function $(id){return document.getElementById(id);}
var row = 4;  
var col = 4;
var width = 96;
var height = 96;
var isIE = false;
var isFF = false;
var arr = [];
var tmp_from = [];
var tmp_to = [];

function DragClass(id,x,y){  //drag class
	this.id = id;
	this.posX = x;
	this.posY = y;
	this.type = 0; //1:col 2:row 3:table 4:head
	this.obj = null;
	this.color = null;
	this.px = null;
	this.py = null;
}
DragClass.prototype.init = function(){
	if(this.type == 1){  
		this.color = "blue";
		this.obj.style.background = this.color;
		this.obj.style.color = "yellow";
		this.start();
	}
	else if(this.type == 2){
		this.color = "green";
		this.obj.style.background = this.color;
		this.obj.style.color = "yellow";
		this.start();
	}
	else if(this.type == 3){
		this.color = "red";
		this.obj.style.background = "red";
		this.obj.style.color = "yellow";
		this.start();
	}
	else{
		this.color = "black";
		this.obj.style.background = this.color;
		this.obj.innerHTML = "固定表头";
		this.obj.style.color = 'white';
	}
};

DragClass.prototype.start = function(){
	var self = this;
	this.obj.onmousedown = function(e){
		e = e || window.event;	

		if(self.type == 3){
			self.px = get_xy(e)[0]-self.posX;
			self.py = get_xy(e)[1]-self.posY;	
			self.changeStyle();
		}
		else if(self.type == 1){
			tmp_from = get_tmp(1,self.id.split('_')[1]);
			for(var i in tmp_from){
				tmp_from[i].px = get_xy(e)[0]-tmp_from[i].posX;
				tmp_from[i].py = get_xy(e)[1]-tmp_from[i].posY;
				tmp_from[i].changeStyle();
			}
		}
		else if(self.type == 2){
			tmp_from = get_tmp(2,self.id.split('_')[0]);
			for(var i in tmp_from){
				tmp_from[i].px = get_xy(e)[0]-tmp_from[i].posX;
				tmp_from[i].py = get_xy(e)[1]-tmp_from[i].posY;
				tmp_from[i].changeStyle();
			}
		}

		document.onmousemove = function(e){
			self.move(e);
			return false;
		};
		document.onmouseup = function(e){
			self.stop(e);
		};
		return false;
	};
}

DragClass.prototype.move = function(e){
	if(this.type == 3){
		this.obj.style.left = (get_xy(e)[0]-this.px)+'px';
		this.obj.style.top =  (get_xy(e)[1]-this.py)+'px';
	}
	else if(this.type == 1 || this.type == 2){
		for(var i in tmp_from){
			tmp_from[i].obj.style.left = (get_xy(e)[0]-tmp_from[i].px)+'px';
			tmp_from[i].obj.style.top = (get_xy(e)[1]-tmp_from[i].py)+'px';
		}
	}
}
DragClass.prototype.stop = function(e){
	this.check(get_xy(e)[0],get_xy(e)[1]);
	if(this.type == 3){
		this.changeStyleBack();
	}
	else{
		for(var i in tmp_from){		
			tmp_from[i].changeStyleBack();
		}
	}
	
	document.onmousemove = null;
	document.onmouseup = null;
	
}

DragClass.prototype.changeStyle = function(){
	this.obj.style.background = "lightgray";
	this.obj.style.zIndex = "1";
}
DragClass.prototype.changeStyleBack = function(){
	this.obj.style.background = this.color;
	this.obj.style.zIndex = '0';
}
DragClass.prototype.check = function(x,y){  //check single
	var flag = true;
	var flags = true;
	for(var key in arr){
		var i = arr[key].id.split("_")[0];
		var j = arr[key].id.split("_")[1];
		if(this.type == 3 && arr[key].type == 3){
			if(x<30+j*100+width && x>30+j*100 && y<30+i*100+height && y>30+i*100){
				this.table_each(arr[key]);
				flag = false;
				break;
			}
		}
		else if(this.type == 1 && arr[key].type == 1){
			if(x<30+j*100+width && x>30+j*100 && y<30+i*100+height && y>30+i*100){
				tmp_to = get_tmp(1, j);
				if(tmp_to.length == tmp_from.length){
					//alert('ok');
					for(var ii=0; ii<tmp_to.length; ii++){
						tmp_from[ii].table_each(tmp_to[ii]);
					}
				}
				flags = false;
				break;
			}
		}
		else if(this.type == 2 && arr[key].type == 2){
			if(x<30+j*100+width && x>30+j*100 && y<30+i*100+height && y>30+i*100){
				tmp_to = get_tmp(2, i);
				if(tmp_to.length == tmp_from.length){
					//alert('ok');
					for(var ii=0; ii<tmp_to.length; ii++){
						tmp_from[ii].table_each(tmp_to[ii]);
					}
				}
				flags = false;
				break;
			}
		}
	}
	if(flag){
		this.obj.style.left = this.posX + 'px';
		this.obj.style.top = this.posY + 'px';
	}
	if(flags){
		for(var x in tmp_from){
			tmp_from[x].obj.style.left = tmp_from[x].posX+'px';
			tmp_from[x].obj.style.top = tmp_from[x].posY+'px';
		}
	}
}

DragClass.prototype.table_each = function(o){  //交换
	var px = this.posX;
	var py = this.posY;
	var id = this.id;
	this.posX = o.posX;
	this.posY = o.posY;
	this.id = o.id;
	o.id = id;
	o.posX = px;
	o.posY = py;
	this.obj.style.left = this.posX + 'px';
	this.obj.style.top = this.posY + 'px';
	o.obj.style.left = o.posX+'px';
	o.obj.style.top = o.posY+'px';
}

function init(){
	var frag = document.createDocumentFragment();  //create fragment
	for(var i=0; i<row; i++){
		for(var j=0; j<col; j++){
			var span = document.createElement("span");
			span.className = "mil";
			span.style.position = "absolute";
			span.style.width = width+'px';
			span.style.height = height+'px';
			span.style.top = 30+i*100+'px';
			span.style.left = 30+j*100+'px';
			span.id = i+'_'+j;
			var obj = new DragClass(span.id, 30+j*100, 30+i*100);
			obj.obj = span;				
			arr.push(obj);
			if(i==0 && j==0){  //head
				obj.type = 4;
			}
			else if(i==0){  // col head
				span.innerHTML = "列头"+j;
				obj.type = 1;
			}
			else if(j==0){  // row head
				span.innerHTML = "行头"+i;
				obj.type = 2;
			}
			else{
				span.innerHTML = "表格"+i+"_"+j;			
				obj.type = 3;
			}
			obj.init();
			frag.appendChild(span);
		}
	} 
	$('main').appendChild(frag);
}

function get_tmp(type, i){
	var tmp = [];
	for(var x in arr){
		if(type == 1){
			if(arr[x].id.split('_')[1] == i){
				tmp.push(arr[x]);
			}
		}
		else{
			if(arr[x].id.split('_')[0] == i)
				tmp.push(arr[x]);	
		}
	}
	tmp.sort(function(a,b){   //asc sort
		var ax = a.id.split('_')[0];
		var ay = a.id.split('_')[1];
		var bx = b.id.split('_')[0];
		var by = b.id.split('_')[1];
		if(ax < bx || ay < by)
			return 1;
		else
			return -1;
	})
	return tmp;
}

function get_xy(e){  //get mouse
	e = e || window.event;
	var arr = [];
	var x = e.pageX || e.clientX;
	var y = e.pageY || e.clientY;
	x = x-$('main').offsetLeft;
	arr[0] = x;
	arr[1] = y;
	return arr;
}


window.onload = function(){
	init();
}
</script>
 

某公司的一道js面试题,要实现一种类似于可拖动表格的功能!

 

 

 

分享到:
评论

相关推荐

    JavaScript 一道字符串分解的题目

    去某公司(公司名不说了,人这套题说不定还要用)面试,现场30分钟做了一套题,其中有一道是这样的: 要求用js写一个函数,对传入的形如下网址字符串,返回对应的对象。 如: 若传入字符串a=’?name=zhiyelee&blog=...

    采访:我是追梦赤子心,公众号“深圳湾码农”的作者,某上市集团公司高级前端开发,深耕前沿领域多年,每天攻破一道题,带你从0到1系统建造web全栈完整的知识体系!

    面试大前端每日一题,从基础到进阶,从原理到实战,用面试题来倒逼强迫自己每天去学习去查漏补缺,系统完善前端的完整知识体系!注:每天早上9点左右更新译文及前一天的答案,首页文件夹里的文章扩展网络,替代参考...

    DeepSeek与AI幻觉-清华大学团队制作

    DeepSeek与AI幻觉-清华大学团队制作 一、什么是AI幻觉 (定义与基础概念) 二、DeepSeek为什么会产生幻觉 (聚焦特定AI模型的幻觉成因分析) 三、AI幻觉评测 (评估AI幻觉的频率、类型与影响的方法) 四、如何减缓AI幻觉 (解决方案与技术优化方向) 五、AI幻觉的创造力价值 (探讨幻觉在创新场景中的潜在益处,如艺术生成、灵感激发等)

    协同过滤算法商品推荐系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    协同过滤算法商品推荐系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 前台用户可以实现注册登录、商品浏览,在线客服,加入购物车,加入收藏,下单购买,个人信息管理,收货信息管理,收藏管理,评论功能。 后台管理员可以进行用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    MES系统数字化工厂解决方案.pptx

    MES系统数字化工厂解决方案.pptx

    MUI调用照片以及裁剪和图库照片上传到服务器

    MUI调用照片以及裁剪和图库照片上传到服务器

    ChatGPT付费创作系统V3.1.3独立版 WEB端+H5端+小程序端 (新增DeepSeek高级通道+新的推理输出格式)

    GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序, 是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。这是一种基于人工智能技术的问答系统, 可以实现智能回答用户提出的问题。相比传统的问答系统,ChatGPT可以更加准确地理解用户的意图, 提供更加精准的答案。同时系统采用了最新的GPT3.5接口与GPT4模型,同时还支持型,文心一言,腾讯混元, 讯飞星火,通义千问,DeepSeeK,智普等等国内各种大模型,可以更好地适应不同的应用场景,支持站点无限多开, 可以说ChatGPT付费创作系统目前国内相对体验比较好的一款的ChatGPT及多接口软件系统。 新增接入DeepSeek-R1、DeepSeek-V3(Ollama自部署和第三方均支持)、高级通道增加DeepSeek、 支持AI接口输出的reasoning_content字段(新的推理输出格式)、更新模型库、修复导出Excel的bug等功能, 优化了云灵Midjourney接口,出图更快更稳定。小程序端变化不大该系统版本测试下来比较完美, 老版本升级时数据库结构同步下,同时把原来

    基于java的美食点餐管理平台设计的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了一款基于Java技术的美食点餐管理平台的设计与实现。该平台旨在优化传统餐饮行业的服务流程,通过智能化的点餐系统、高效的订单处理、智能库存管理和数据分析等功能,为用户提供便捷高效的点餐体验,并提升餐厅管理效率和服务质量。系统涵盖了前端设计、后端开发、数据库设计等方面,采用了成熟的Java技术和现代Web开发框架,如Spring Boot、Vue.js或React,确保系统的高效性和稳定性。此外,文档还包括详细的用户界面设计、模块实现以及系统部署指南,帮助开发者理解和搭建该平台。 适合人群:具备一定的Java编程基础和技术经验的研发人员、IT从业者以及有意开发类似系统的企业和个人。 使用场景及目标:①为餐厅提供一个集点餐、订单处理、库存管理于一体的高效平台;②优化传统餐饮服务流程,提升客户服务体验;③利用大数据分析辅助决策,助力餐饮企业精细化运营;④通过集成多种支付方式和其他外部系统,满足多样化的商业需求。 其他说明:本项目不仅提供了完整的技术方案和支持文档,还针对实际应用场景提出了多个扩展方向和技术优化思路,旨在引导用户不断迭代和完善该平台的功能和性能。

    相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长

    相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长 ,相场模拟; 选择性激光烧结; 激光融覆; 凝固; 枝晶生长,相场模拟与激光工艺:枝晶生长的凝固过程研究

    基于ssh框架开发的厂区管理系统,集成增删改查功能。.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    关于加强新能源汽车安全管理涉及的法规标准分析.pptx

    关于加强新能源汽车安全管理涉及的法规标准分析.pptx

    基于SSM的校园二手交易平台.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    机器学习课程设计——基于AdaBoost的银行用户逾期行为检测.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    UI+svg+规范设置打包

    UI+svg格式

    关于乘用车燃料消耗量评价方法及指标强制性国家标准的分析.pptx

    关于乘用车燃料消耗量评价方法及指标强制性国家标准的分析.pptx

    openjpeg-1.5.1-18.el7.x64-86.rpm.tar.gz

    1、文件内容:openjpeg-1.5.1-18.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/openjpeg-1.5.1-18.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,fpga

    FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,fpga verilog实现视频协议bt656和1120组帧解帧代码 有文档介绍协议,有mod仿真,matlab代码仿真 ,FPGA; Verilog; BT656协议; 1120组帧解帧代码; 文档介绍; Mod仿真; Matlab代码仿真,FPGA Verilog:实现BT656与1120组帧解帧代码的仿真与文档化研究

    基于 RAG 与大模型技术的医疗问答系统(毕设&课设&实训&大作业&竞赛&项目)

    基于 RAG 与大模型技术的医疗问答系统,利用 DiseaseKG 数据集与 Neo4j 构 建知识图谱,结合 BERT 的命名实体识别和 34b 大模型的意图识别,通过精确的知识检索和问答生成, 提升系统在医疗咨询中的性能,解决大模型在医疗领域应用的可靠性问题。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    基于 vue+elementUI+springboot 设计的 模仿'猪八戒'的服务外包平台.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    抖音视频带货:行业趋势与营销策略.pptx

    抖音视频带货:行业趋势与营销策略.pptx

Global site tag (gtag.js) - Google Analytics