JS遇到的一些问题(持续更新)

1 篇文章 0 订阅

JS遇到的一些问题

  1. window.onload = function(){...}一个页面中只执行一次;相当于onload事件绑定匿名函数;
  2. 一个页面中,一个JS应用另一个JS文件的函数;
    通过操作DOM插入JS文件,然后执行里面的函数,必须在</body>标签之后
//html中引用B文件
<body>
</body>
<script src="./b.js"></script>
//b.js引用a.js
var new_e = document.addElement("script");
new_e.setAttribute("type","text/script");
new_e.setAttribute("src","./a.js");
document.body.appendChild(new_e);

function b(){
//在B.JS文件中执行A.JS的函数
	a();
};
  1. 对外暴露函数接口:()();
//全局
(function(){
	function test(){...代码}
	window.ts = test();
})()
//或
(function(){
	window.ts = function(){...代码};
})()

(function(){
	var test1 = function (){...代码}
	var test2 = function (){...代码}
	window.ts = {test1,test2};
})()

//闭包
var foo = (function(){
	return {
		test = function(){...代码};
		}
})();
console.log(foo.test);
  1. 通过JS加载CSS样式的思考:
  • 操作DOM,创建<link>标签引入,兼容性好;
  • 封装函数,动态加载:兼容性问题。
  • 封装插件内部=>操作DOM创建<link>标签引入的URL,将插件引用时,其内部的URL的相对地址问题?URL为当前引用JS的相对路径,不是插件内部的相对路径。有待优化~!!
  1. 变量提升,函数提升,元素树节点树获取(实时);

  2. 语法糖this

  3. 鼠标事件mouseovermouseout多次触发问题:事件冒泡;

    • 一般和mouseentermouseleave相区别,兼容问题;
    • 阻止事件冒泡,子节点添加event.stopPropagation()方法;
    • 可以使用jQuery封装好的的mouseentermouseleave事件;
  4. 实时获取DOM节点尺寸?window.onresize();
    点击事件动态获取位置?

    动态元素有3个至关重要的元素:位置、尺寸和可见性 link

  5. 子盒子的margin-top坍塌问题:父盒子 overflow:hidden;或子盒子前添加兄弟元素E::before{content:'',overflow:hidden};

    overflow:hidden 隐藏子元素溢出;撑开子元素浮动的父级盒子;

  6. css中P元素内英文长单词溢出部分=>“长单词”断字换行:word-wrap:break-word;
    取消默认长单词换行=>“所有行”断字换行:word-break:break-all;
    不换行:white-space:nowrap;
    溢出隐藏以“…”代替:overflow:hidden;text-overflow:ellipsis;white-space:nowrap;

    你真的了解word-wrap和word-break的区别吗? - - 无双·博客园

  7. margin影响JS操作元素位置偏差问题:position:relativewidth是否会不变化,直接偏移?

  8. 垃圾回收机制:销毁不需要的变量缓解内存;

  9. "消失"的几种常用CSS:display:nonevisibility:hiddenopacity:0
    其中:visibility对于transition有效,伪:hover效果;

  10. “拖拽”实现:元素可被拖拽draggable='true',阻止“链接打开”默认事件preventDefault(),监听事件ondragstart/ondragover/ondrag//dragged,处理dataTransfer.setData()/getData()event.target.appendChild()

  11. 判断一个对象it是否已存在一个数组array中:

//遍历,封装函数
var result = false;
array.forEach(e=>{
	if(e == it){
		result = true;
	}
})
return result;
  1. 实现滚动条隐藏:包一层overflow:hidden,内部width加上滚动条宽度,scroll-x:hidden;scroll-y:scroll
    Chrome浏览器下.element::-webkit-scrollbar {display:none},不兼容其他浏览器;
  2. 阻止双击选中文字:
  • js:阻止选取事件 => <div onselectstart="return false" />IE以及Chrome,火狐不起作用css补救;
  • css:{user-select:none;-moz-user-select:none}Firefox
  • css选择器:xxx::selection{background: transparent;},注意兼容性;

双击选中所有文字,复制文本,

  • 如何取到promise返回的值?
    只能在内部使用,或后接.then()内部使用;

  • DOM.sytle.attr获取:写在CSS样式表中,无法获取; 直接写在HTML内联中或JS中可以获取;查看官网-定义
    JS改变样式,增删,规避这种问题;
    少用:hover,移动端不兼容,以增删的形式规避;

  • input、text-area、select自动填充历史记录时,会自动填充背景色(E:-webkit-autofill:backgroud-color:rgb(250,255,189)):取消自动填充autocomplete="off"

  • JS判断空对象是否为{}JSON.stringify(data) == "{}";或for in遍历内部是否有属性,或obj.getOwnPropertyName === 0;或Object.keys(data).length === 0

  • 懒加载:设置setTimeout()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值