Maison > interface Web > js tutoriel > Code pour dessiner des cibles fléchées en utilisant js et css

Code pour dessiner des cibles fléchées en utilisant js et css

小云云
Libérer: 2018-03-26 16:22:09
original
1795 Les gens l'ont consulté

Supposons que je veuille dessiner une image similaire à une cible fléchée maintenant, avec trois cercles. Peut-être que vous pouvez les écrire directement en HTML. Cet article partage principalement avec vous le code pour dessiner une cible fléchée en utilisant js et css, j'espère. ça peut aider tout le monde.

//html部分<body>
    <p class="circle0">
        <p class="circle1">
            <p class="circle2">
            </p>
        </p>
    </p></body>
Copier après la connexion

Que diriez-vous de créer un cercle centre et d'imbriquer des cercles à l'intérieur ?
La position est utilisée ici. Les valeurs de position sont fixes, statiques, relatives, absolues, héritées
Parmi elles, static est la valeur par défaut, fixe est positionnée par rapport à la fenêtre du navigateur et la coordonnée du coin supérieur gauche est (0, 0 );
relatif est appelé positionnement relatif, qui est positionné par rapport à lui-même est (0, 0> signifie décalage de 20px vers la gauche <; 🎜>absolu est appelé positionnement absolu, qui est relatif sauf statique. Un élément parent positionné par left=20pxinherit hérite de la valeur de l'attribut position de l'élément parent.

Ici, on fait ça

Continuez à écrire le CSS du cercle intérieur à la main, puis vous devrez peut-être l'écrire un par un, car leurs tailles sont différentes
.circle0{    /*大圆的大小*/
    /*如何画圆?先是画一个正方形*/
    width:600px;    height:600px;    /*然后设置圆角为50%,就变成一个圆*/
    border-radius:50%;    /*大圆设成relative作为第一个内圆的参考定位容器*/
    position:relative;    /*大圆居中*/
    margin:0 auto;    border:1px solid #000;    background-color:green;}
Copier après la connexion

Bien que vous puissiez également écrire les trois cibles à flèches rondes que vous souhaitez, mais ? ? ?
.circle1{    width:400px;    height:400px;    border-radius:50%;    /*这是居中的一种方法哦*/
    position:absolute;    top:50%;    left:50%;    /*这样设置之后,圆会偏右下方,应该再往左上方移动一半的自己的宽和高*/
    margin-left:-200px;    margin-top:-200px;    /*这样就居中啦*/  

    border:1px solid #000;    background-color:green;}/*最里面的圆也是这样写,提示:此时它相对第二个圆定位,但是没有什么关系*/.circle2{    width:200px;    height:200px;    border-radius:50%;    position:absolute;    top:50%;    left:50%;    margin-left:-100px;    margin-top:-100px;  

    border:1px solid #000;    background-color:green;}
Copier après la connexion

Et si je vous demande de dessiner 100 cercles ? Vous ne pouvez pas les écrire un par un, c'est un travail et un code tellement répétitifs, alors entrons dans le sujet de cet article, écrivons-le en js.

Des étudiants attentifs ont découvert que le code CSS de chaque cercle intérieur est très régulier. Ils sont juste de taille différente. Ensuite, le code central est divisé en deux parties. La première moitié est la même et la seconde moitié. est basé sur lui-même. Écrit dans la moitié de la largeur et de la hauteur.

Maintenant que nous avons trouvé le modèle, nous pouvons commencer à écrire

/*css部分*/
    /*既然圆的大小是不一样的而且是有规律,那么我们就不写死了,先把一样的写出来吧,有同学可能想为什么不直接也在js中写?第一,因为这都是相同的代码,重复写几次,很耗空间,第二,在js中写这些比直接给它个className耗性能,所以我们能在css中写的还是在css中写,这样也能更好的分离*/
    .circle{        border-radius: 50%;        /*文本居中,为下一篇文章做铺垫*/
        text-align: center;        background-color: green;        border: 1px solid #000;        position: absolute;        top:50%;        left:50%;        cursor: pointer;    }
    /*利用id选择器的优先级比class大,覆盖掉一些属性值,大圆我们希望它在浏览器中也是居中的,而且position是相对定位的,大小也是不要写死,增加灵活性,修改的时候只需要修改几个参数*/
    #circle{        position: relative;        top:0;        left:0;        margin:10px auto;    }
Copier après la connexion
ok, nous n'avons donc pas besoin d'utiliser des CSS et du HTML aussi longs pour écrire, et utiliser N'est-il pas très pratique d'utiliser directement js pour y afficher les règles Hehe ? Ci-joint le rendu de n=20, intervalle=30px :
/*js部分*/window.onload=function(){
        //先创建大圆
        var layout=document.createElement("p");        //注意添加class和id的区别哦
        layout.className="circle";
        layout.id="circle";        var n=10;//n个圆,人为参数一,可根据需要修改
        var interval=30;//圆宽高依次小30px,间距则为15px,且最小的圆直径设为30px,则最大的圆的直径为n个interval,人为参数二,可根据需要修改

        layout.style.width=n*interval+"px";
        layout.style.height=n*interval+"px";        //添加文本
        layout.innerHTML=n;        //把大圆添加进body中
        document.getElementsByTagName("body")[0].appendChild(layout);        //接着创建小圆
        for(var i=1;i<n;i++){            //千万要在循环的时候重新给p指向哦,不然再第二个循环的时候就会出错
            var p=document.createElement("p");
            p.className="circle";            //画圆,返回的子圆作为父圆,继续画圆
            layout=loadp(layout,p,n-i); 
        }
    }    function loadp(parent,child,v){
        child.style.width=30*v+"px";
        child.style.height=30*v+"px";        //注意驼峰
        child.style.marginLeft=-15*v+"px";
        child.style.marginTop=-15*v+"px";        //添加文本
        child.innerHTML=v;        parent.appendChild(child);        //返回子圆哦
        //如果上面没有在每一次循环中重新指向一个新的p,在第二次循环的时候调用本函数就是在修改第一个内圆的属性值,而且在appendChild的时候发生错误
        return child;
    }
Copier après la connexion


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal