栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

jQuery / JavaScript冲突检测

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jQuery / JavaScript冲突检测

var overlaps = (function () {    function getPositions( elem ) {        var pos, width, height;        pos = $( elem ).position();        width = $( elem ).width();        height = $( elem ).height();        return [ [ pos.left, pos.left + width ], [ pos.top, pos.top + height ] ];    }    function comparePositions( p1, p2 ) {        var r1, r2;        r1 = p1[0] < p2[0] ? p1 : p2;        r2 = p1[0] < p2[0] ? p2 : p1;        return r1[1] > r2[0] || r1[0] === r2[0];    }    return function ( a, b ) {        var pos1 = getPositions( a ), pos2 = getPositions( b );        return comparePositions( pos1[0], pos2[0] ) && comparePositions( pos1[1], pos2[1] );    };})();$(function () {    var area = $( '#area' )[0],        box = $( '#box0' )[0],        html;    html = $( area ).children().not( box ).map( function ( i ) {        return '<p>Red box + Box ' + ( i + 1 ) + ' = ' + overlaps( box, this ) + '</p>';    }).get().join( '' );    $( 'body' ).append( html );});body {    padding: 30px;    color: #444;    font-family: Arial, sans-serif;}h1 {    font-size: 24px;    margin-bottom: 20px;}#area {    border: 2px solid gray;    width: 500px;    height: 400px;    position: relative;}#area > div {    background-color: rgba(122, 122, 122, 0.3);    position: absolute;    text-align: center;    font-size: 50px;    width: 60px;    height: 60px;}#box0 {    background-color: rgba(255, 0, 0, 0.5) !important;    top: 150px;    left: 150px;}#box1 {    top: 260px;    left: 50px;}#box2 {    top: 110px;    left: 160px;}#box3 {    top: 200px;    left: 200px;}#box4 {    top: 50px;    left: 400px;}p {    margin: 5px 0;}<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><h1>Detect overlapping with Javascript</h1><div id="area">    <div id="box0"></div>    <div id="box1">1</div>    <div id="box2">2</div>    <div id="box3">3</div>    <div id="box4">4</div></div>

一般思路-获得框的偏移量和尺寸,并检查它们是否重叠。

如果要更新,可以使用

setInterval

function detectOverlapping() {    // pre that detects if the box overlaps with a moving box    setInterval(detectOverlapping, 25);}detectOverlapping();

另外,请注意,您可以针对特定示例优化功能。

  • 因为它们是固定的,所以您不必重复读取框的尺寸(就像我在代码中一样)。您可以在页面加载时读取它们(将其读取到变量中),然后仅读取变量

  • 小盒子的水平位置不会改变(除非用户调整窗口大小)。轿厢的垂直位置不变。因此,这些值也不必重复读取,也可以存储到变量中。

  • 您无需测试小盒子是否始终与所有汽车盒子重叠。您可以-基于其垂直位置-确定当前箱子在哪个车道上,并仅从该车道测试特定的汽车箱子。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号