var Cen = 6;//定义菱形中部为第几行(起始值为0)

         //for循环输出菱形
document.write("<button onclick='xh()'>点我for循环</button>");//在HTML里输出一个按钮,点击后执行输出菱形的操作
document.write("<p id='xunhuan'></p>");//在HTML里输出一个段落p来容纳菱形
function xh() {
var kong = "";
var x = 0;//控制margin的数值增加减少的值
for (i = 0 ; i <= Cen * 2 ; i++) {
if (i == 0 || i == Cen * 2) {
kong += "<p style='margin-left:" + (Cen * 20 + 5) + "px'>8</p>";
};
if (i != 0 && i <= Cen) {
x += 20
kong += "<p style='margin-left:" + (Cen * 20 - x) + "px'> <span style='margin-right:" + (2 * x) + "px'>8</span> <span>8</span> </p>";
};
console.log(x);
if (i != Cen * 2 && i > Cen) {
x -= 20
kong += "<p style='margin-left:" + (Cen * 20 - x) + "px'> <span style='margin-right:" + (2 * x) + "px'>8</span> <span>8</span> </p>";
};
};
document.getElementById("xunhuan").innerHTML = kong; }; //while循环输出菱形
document.write("<button onclick='xh2()'>点我while循环</button>");
document.write("<p id='xunhuan2'></p>");
function xh2() {
var kong = "";
var i = 0, x = 0;
while (i <= Cen * 2) {
if (i == 0 || i == Cen * 2) {
kong += "<p style='margin-left:" +( Cen * 20 + 5) + "px'>8</p>";
};
if (i != 0 && i <= Cen) {
x += 20;
kong += "<p style='margin-left:" + (Cen * 20 - x) + "px'> <span style='margin-right:" + (2 * x) + "px'>8</span> <span>8</span> </p>";
};
if (i != Cen * 2 && i > Cen) {
x -= 20;
kong += "<p style='margin-left:" + (Cen * 20 - x) + "px'> <span style='margin-right:" + (2 * x) + "px'>8</span> <span>8</span> </p>";
};
i++
};
document.getElementById("xunhuan2").innerHTML = kong; };

逻辑分析:

1、我们用html建立一个中部处于第三行时的小的菱形,来分析它的构成和规律

2. (1)输出段落,菱形中部=3,段落p=5,因此我们首先用for||while循环输出5个段落;

(2)第一个p和最后一个p为菱形的顶点,仅需要在<p>里输入一个8即可,因此首先我们做一个判断,让其先输入两个顶点;

(3)中部为菱形的两条边,其中菱形为对称图图形,因此我们发现其和分为两个部分需递增和递减其margin-left和两条边相隔的margin-right就可以实现了,因此我们做了两个判断;

(4)最后我们来发现这个菱形的中部其实就是他对称分隔的两个判断的值,而最后一个顶点就是他输出的总的段落值,因此我们来根据这个中部值去定义每一个判断值

(5)最后我们来分析他的margin-left和两条边相隔的margin-right的规律,发现除了一头一尾一样,上面和下面出现规律递增递减,因此我们这里定义一个x=0
,通过其递增递减来实现菱形边距离的变化。

综上所述,步骤就几个:
html里输入一个菱形,分析他的结构,找出规律
判断两个顶点的位置和
判断中部和中部以上的边的位置
判断中部以上的边的位置
最后根据这个死的菱形去分析如何变成中部可以活动的菱形,分析其中不值与其的关联

JavaScript学习笔记-循环输出菱形,并可菱形自定义大小的更多相关文章

  1. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  2. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  3. Java程序猿JavaScript学习笔记(4——关闭/getter/setter)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  4. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  5. JavaScript学习笔记[0]

    JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...

  6. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  7. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  8. JavaScript:学习笔记(5)——箭头函数=>以及实践

    JavaScript:学习笔记(5)——箭头函数=>以及实践 ES6标准新增了一种新的函数:Arrow Function(箭头函数).本文参考的链接如下: MDN箭头函数:https://dev ...

  9. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

随机推荐

  1. ASP.NET Core 1.0 安装并发布到Centos 7.2 使用jexus 5.8.2

    安装运行环境 sudoyuminstall libunwind libicu 下载.net core https://www.microsoft.com/net/download 下载完后上传文件 安 ...

  2. 在ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...

  3. WPF之全局快捷键

    目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种 ...

  4. NopCommerce功能与特点介绍

    [本文转自]http://www.cnblogs.com/nopcommerce-b2c/p/3758676.html 前两节我们主要介绍了NopCommerce下载与安装和NopCommerce中文 ...

  5. 【2016-10-11】【坚持学习】【Day2】【代理模式】

    今天学习了代理模式. 定义 官方: 代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问. Proxy Pattern: Provide a surrogate or plac ...

  6. 探索 OpenStack 之(16):计量模块 Ceilometer 介绍及优化

    0. 背景 0.1 为什么要有 Ceilometer? 通常云,特别是公有云在计费方面有三个层次: 计量 (Metering): 收集资源的使用数据,其数据信息主要包括:使用对象(what), 使用者 ...

  7. POJ 1228 Grandpa's Estate --深入理解凸包

    题意: 判断凸包是否稳定. 解法: 稳定凸包每条边上至少有三个点. 这题就在于求凸包的细节了,求凸包有两种算法: 1.基于水平序的Andrew算法 2.基于极角序的Graham算法 两种算法都有一个类 ...

  8. AC日记——简单密码 openjudge 1.7 10

    10:简单密码 总时间限制:  1000ms 内存限制:  65536kB 描述 Julius Caesar曾经使用过一种很简单的密码.对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这 ...

  9. 关于button和form提交的一些问题

    1.form 中type 为submit 和button的区别 submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理( ...

  10. sublime text2安装package control的方法

    Package Control 方法一:在线安装,首先打开 Ctrl + ~,输入如下的代码: import urllib2,os; pf='Package Control.sublime-packa ...