`

在Android上模拟MetroUI

阅读更多
在Android上模拟WP7的MetroUI

MetroItem
import android.view.View;

public class MetroItem {

	private View mMetroView = null;

	private int mRow = 0;
	private int mRowSpan = 1;

	private int mCol = 0;
	private int mColSpan = 1;

	/**
	 * @param v
	 * @param row
	 * @param col
	 */
	public MetroItem(View v, int row, int col) {
		this(v, row, 1, col, 1);
	}

	/**
	 * @param v
	 * @param row
	 * @param rowspan
	 * @param col
	 * @param colspan
	 */
	public MetroItem(View v, int row, int rowspan, int col, int colspan) {
		mMetroView = v;

		if (row < 0)
			throw new IllegalArgumentException("row < 0");
		mRow = row;

		if (col < 0)
			throw new IllegalArgumentException("col < 0");
		mCol = col;

		if (rowspan < 1)
			throw new IllegalArgumentException("rowspan < 1");
		mRowSpan = rowspan;

		if (colspan < 1)
			throw new IllegalArgumentException("colspan < 1");
		mColSpan = colspan;
	}

	public View getMetroView() {
		return mMetroView;
	}

	public int getRow() {
		return mRow;
	}

	public int getRowSpan() {
		return mRowSpan;
	}

	public int getCol() {
		return mCol;
	}

	public int getColSpan() {
		return mColSpan;
	}
}

MetroView
import java.util.ArrayList;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.Scroller;

import com.test.android.metro.R;
import com.test.android.metro.model.MetroItem;

public class MetroView extends ViewGroup {

	public static enum OrientationType {
		All, Vertical, Horizontal
	};

	private static final String TAG = "MetroView";

	private static final LayoutParams FILL_FILL = new LayoutParams(
			LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

	/** Default count of visible items */
	private static final int DEF_VISIBLE_ROWS = 5;
	private static final int DEF_VISIBLE_COLS = 2;

	private OrientationType mOrientation = OrientationType.Horizontal;

	// Count of visible items
	protected int visibleRows = DEF_VISIBLE_ROWS;
	protected int visibleCols = DEF_VISIBLE_COLS;

	private Scroller mScroller;
	private VelocityTracker mVelocityTracker;

	private int mCurRow = 0, mCurCol = 0;
	protected int mRowsCount = 0, mColsCount = 0;

	private static final int TOUCH_STATE_REST = 0;
	private static final int TOUCH_STATE_SCROLLING = 1;

	private static final int SNAP_VELOCITY = 600;

	private int mTouchState = TOUCH_STATE_REST;
	private int mTouchSlop;
	private float mLastMotionX, mLastMotionY;

	private MetroListener metroListener;

	protected ArrayList<MetroItem> mMetroItems = new ArrayList<MetroItem>();

	private int mRowHeight, mColWidth;
	private int mGap = 0;

	// for long press event
	private boolean mHasPerformedLongPress;
	private CheckForLongPress mPendingCheckForLongPress;

	public MetroView(Context context) {
		this(context, null);
	}

	public MetroView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public MetroView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs);
		initViewGroup(context);
	}

	private void initViewGroup(Context context) {
		mScroller = new Scroller(context);

		mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();

		setOnLongClickListener(longclickListener);
	}

	public void setGap(int gap) {
		mGap = gap;
	}

	/**
	 * set row and column count for visible item 0 equals to not change current
	 * value others equal to
	 * 
	 * @param rowCount
	 * @param colCount
	 */
	public void setVisibleItems(int rowCount, int colCount) {

		if (rowCount < 0 || colCount < 0)
			throw new IllegalArgumentException("visible count < 0");

		if (rowCount != 0)
			visibleRows = rowCount;

		if (colCount != 0)
			visibleCols = colCount;
	}

	public int getVisibleRows() {
		return visibleRows;
	}

	public int getVisibleCols() {
		return visibleCols;
	}

	public void addMetroItem(MetroItem item) {
		mMetroItems.add(item);
		addView(item.getMetroView(), FILL_FILL);

		adjustRowCol(item);
	}

	public boolean deleteMetroItem(MetroItem item) {

		boolean ret = false;

		if (mMetroItems.contains(item)) {
			mMetroItems.remove(item);
			removeView(item.getMetroView());
			ret = true;
		}

		mRowsCount = 0;
		mColsCount = 0;

		for (MetroItem mi : mMetroItems) {
			adjustRowCol(mi);
		}

		return ret;
	}

	private void adjustRowCol(MetroItem item) {
		// adjust rows count
		if (mRowsCount < item.getRow() + item.getRowSpan())
			mRowsCount = item.getRow() + item.getRowSpan();

		// adjust columns count
		if (mColsCount < item.getCol() + item.getColSpan())
			mColsCount = item.getCol() + item.getColSpan();
	}

	public void clearMetroItem() {
		mMetroItems.clear();
		removeAllViews();

		mRowsCount = 0;
		mColsCount = 0;
	}

	public void setOrientation(OrientationType orientation) {
		mOrientation = orientation;
	}

	public OrientationType getOrientation() {
		return mOrientation;
	}

	@Override
	protected void onLayout(boolean changed, int l, int t, int r, int b) {

		final int itemCount = mMetroItems.size();

		if (itemCount != getChildCount())
			throw new IllegalArgumentException("contain unrecorded child");

		for (int i = 0; i < itemCount; i++) {
			final MetroItem item = mMetroItems.get(i);
			final View childView = item.getMetroView();

			if (childView.getVisibility() != View.GONE) {
				final int childLeft = (mColWidth + mGap) * item.getCol();
				final int childTop = (mRowHeight + mGap) * item.getRow();
				final int childWidth = (mColWidth + mGap) * item.getColSpan()
						- mGap;
				final int childHeight = (mRowHeight + mGap) * item.getRowSpan()
						- mGap;

				childView.layout(childLeft, childTop, childLeft + childWidth,
						childTop + childHeight);
			}
		}
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);

		final int width = MeasureSpec.getSize(widthMeasureSpec);
		final int height = MeasureSpec.getSize(heightMeasureSpec);

		mRowHeight = (height - (visibleRows - 1) * mGap) / visibleRows;
		mColWidth = (width - (visibleCols - 1) * mGap) / visibleCols;

		// The children are given the same width and height as the scrollLayout
		final int itemCount = mMetroItems.size();

		for (int i = 0; i < itemCount; i++) {

			final MetroItem item = mMetroItems.get(i);
			final View childView = item.getMetroView();

			final int childWidth = MeasureSpec.makeMeasureSpec(
					(mColWidth + mGap) * item.getColSpan() - mGap,
					MeasureSpec.EXACTLY);
			final int childHeight = MeasureSpec.makeMeasureSpec(
					(mRowHeight + mGap) * item.getRowSpan() - mGap,
					MeasureSpec.EXACTLY);

			childView.measure(childWidth, childHeight);
		}

		scrollTo((mColWidth + mGap) * mCurCol, (mRowHeight + mGap) * mCurRow);
	}

	/**
	 * According to the position of current layout scroll to the destination
	 * page.
	 */
	public void snapToDestination() {
		final int destRow = (getScrollY() + (mRowHeight + mGap) / 2)
				/ (mRowHeight + mGap);
		final int destCol = (getScrollX() + (mColWidth + mGap) / 2)
				/ (mColWidth + mGap);
		snapTo(destRow, destCol);
	}

	public void snapTo(int whichRow, int whichCol) {

		if (whichRow < 0)
			whichRow = 0;

		if (whichCol < 0)
			whichCol = 0;

		Log.d(TAG, String.format("snap to row:%d, col:%d", whichRow, whichCol));

		boolean needRedraw = false;

		if (mOrientation == OrientationType.Horizontal) {
			whichRow = 0;
			if (whichCol + visibleCols > mColsCount)
				whichCol = Math.max(mColsCount - visibleCols, 0);
		} else if (mOrientation == OrientationType.Vertical) {
			whichCol = 0;
			if (whichRow + visibleRows > mRowsCount)
				whichRow = Math.max(mRowsCount - visibleRows, 0);
		} else if (mOrientation == OrientationType.All) {
			if (whichRow + visibleRows > mRowsCount)
				whichRow = Math.max(mRowsCount - visibleRows, 0);
			if (whichCol + visibleCols > mColsCount)
				whichCol = Math.max(mColsCount - visibleCols, 0);
		}

		int deltaX = whichCol * (mColWidth + mGap);
		int deltaY = whichRow * (mRowHeight + mGap);

		// get the valid layout page
		if (getScrollX() != deltaX) {
			deltaX = deltaX - getScrollX();
			needRedraw = true;
		}

		if (getScrollY() != deltaY) {
			deltaY = deltaY - getScrollY();
			needRedraw = true;
		}

		if (needRedraw) {
			// only scroll one screen
			int startX = mColWidth;
			int startY = mRowHeight;

			if (deltaX > mColWidth) {
				startX = deltaX - mColWidth;
				deltaX = mColWidth;
			} else
				startX = getScrollX();

			if (deltaY > mRowHeight) {
				startY = deltaY - mRowHeight;
				deltaY = mRowHeight;
			} else
				startY = getScrollY();

			mScroller.startScroll(startX, startY, deltaX, deltaY,
					Math.max(Math.abs(deltaX), Math.abs(deltaY)) * 2);
			mCurRow = whichRow;
			mCurCol = whichCol;
			invalidate(); // Redraw the layout
		}
	}

	public int getCurRow() {
		return mCurRow;
	}

	public int getCurCol() {
		return mCurCol;
	}

	@Override
	public void computeScroll() {
		if (mScroller.computeScrollOffset()) {
			scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
			postInvalidate();
		}
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {

		if (mVelocityTracker == null) {
			mVelocityTracker = VelocityTracker.obtain();
		}
		mVelocityTracker.addMovement(event);

		final int action = event.getAction();
		float x = event.getX();
		float y = event.getY();

		if (mOrientation == OrientationType.Horizontal)
			y = 0;
		else if (mOrientation == OrientationType.Vertical)
			x = 0;

		switch (action) {
		case MotionEvent.ACTION_DOWN:

			if (!mScroller.isFinished()) {
				mScroller.abortAnimation();
			}
			mLastMotionX = x;
			mLastMotionY = y;
			break;
		case MotionEvent.ACTION_MOVE:

			int deltaX = (int) (mLastMotionX - x);
			int deltaY = (int) (mLastMotionY - y);

			mLastMotionX = x;
			mLastMotionY = y;

			scrollBy(deltaX, deltaY);
			break;
		case MotionEvent.ACTION_UP:

			final VelocityTracker velocityTracker = mVelocityTracker;
			velocityTracker.computeCurrentVelocity(1000);

			int velocityX = (int) velocityTracker.getXVelocity();
			int velocityY = (int) velocityTracker.getYVelocity();

			int row = mCurRow;
			int col = mCurCol;

			if (velocityX > SNAP_VELOCITY && mCurCol > 0) {
				// Fling enough to move left
				col--;
			} else if (velocityX < -SNAP_VELOCITY && mCurCol < mColsCount - 1) {
				// Fling enough to move right
				col++;
			}

			if (velocityY > SNAP_VELOCITY && mCurRow > 0) {
				// Fling enough to move up
				row--;
			} else if (velocityY < -SNAP_VELOCITY && mCurRow < mRowsCount - 1) {
				// Fling enough to move down
				row++;
			}

			if (row == mCurRow && col == mCurCol)
				snapToDestination();
			else {
				snapTo(row, col);
				if (metroListener != null)
					metroListener.scrollto(row, col);
			}

			if (mVelocityTracker != null) {
				mVelocityTracker.recycle();
				mVelocityTracker = null;
			}
			mTouchState = TOUCH_STATE_REST;
			break;
		case MotionEvent.ACTION_CANCEL:
			mTouchState = TOUCH_STATE_REST;
			break;
		}

		return true;
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {

		final int action = ev.getAction();
		if ((action == MotionEvent.ACTION_MOVE)
				&& (mTouchState != TOUCH_STATE_REST)) {
			return true;
		}

		final float x = ev.getX();

		switch (action) {
		case MotionEvent.ACTION_MOVE:
			final int xDiff = (int) Math.abs(mLastMotionX - x);
			if (xDiff > mTouchSlop) {
				mTouchState = TOUCH_STATE_SCROLLING;
				cancelLongClick();
			}
			break;
		case MotionEvent.ACTION_DOWN:
			mLastMotionX = x;
			mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST
					: TOUCH_STATE_SCROLLING;

			if (isLongClickable())
				postCheckForLongClick();

			break;

		case MotionEvent.ACTION_CANCEL:
		case MotionEvent.ACTION_UP:
			mTouchState = TOUCH_STATE_REST;
			cancelLongClick();
			break;
		}

		if (mHasPerformedLongPress)
			return true;
		else
			return mTouchState != TOUCH_STATE_REST;
	}

	private void postCheckForLongClick() {
		mHasPerformedLongPress = false;
		if (mPendingCheckForLongPress == null)
			mPendingCheckForLongPress = new CheckForLongPress();

		postDelayed(mPendingCheckForLongPress,
				ViewConfiguration.getLongPressTimeout());
	}

	private void cancelLongClick() {
		if (!mHasPerformedLongPress && mPendingCheckForLongPress != null)
			removeCallbacks(mPendingCheckForLongPress);
	}
	
	class CheckForLongPress implements Runnable {

		public void run() {
			if (performLongClick())
				mHasPerformedLongPress = true;
		}
	}

	private OnLongClickListener longclickListener = new OnLongClickListener() {

		@Override
		public boolean onLongClick(View v) {
			longclickEvent();
			return true;
		}
	};

	/**
	 * long click event
	 */
	protected void longclickEvent() {
		Log.d(TAG, "long click");
	}

	public void setMereoListener(MetroListener metroListener) {
		this.metroListener = metroListener;
	}

	public interface MetroListener {

		public void scrollto(int row, int col);
	}
}
分享到:
评论

相关推荐

    node-v7.2.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.14.2-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    rbac权限控制框架:1.支持角色继承,数据组,行为组.zip

    rbac权限控制框架:1.支持角色继承,数据组,行为组.zip abac,rbac权限控制框架 支持角色继承,数据组,行为组 支持动态角色和静态角色 usage 用户与角色需要额外维护 权限控制规则默认驻留内存, 可自定义RuleRepository实现 角色继承关系默认驻留内存, 可自定义RoleHierarchyRepository实现 数据组关系默认驻留内存, 可自定义DataGroupRepository实现 行为组关系默认驻留内存, 可自定义ActionGroupRepository实现 若使用动态角色需要实现DynamicRoleDefiner

    utlog.sqlite

    utlog.sqlite

    node-v0.12.8-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.2.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.6.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.7.4-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    xia0FridaScript-master.zip

    xia0FridaScript-master.zip

    煤炭地质勘查钻孔质量标准MTT1042-2007.pdf

    煤炭地质勘查钻孔质量标准MTT1042-2007.pdf

    149煤矿生产安全事故现场处置方案.pdf

    149煤矿生产安全事故现场处置方案.pdf

    信息办公个人求职管理系统-jobgljsp.rar

    javaweb登录注册页面,[信息办公]个人求职管理系统,jsp开发源码。

    煤矿重要用途钢丝绳.PDF

    煤矿重要用途钢丝绳.PDF

    2023-06-30-东方财富证券-华电重工-深度研究:乘氢能之风,新能源巨轮远航.pdf

    2023-06-30-东方财富证券-华电重工-深度研究:乘氢能之风,新能源巨轮远航

    node-v5.4.1-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    超详细Python教程,适合零基础小白学习

    超详细Python教程,包含Python数据结构、对象、模块、迭代器等等超多内容 Django框架教程

    node-v7.9.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    微信小程序考试系统.zip

    微信小程序考试系统.zip 微信小程序考试系统 1.安装微信web开发工具 2.运行微信web开发工具,点击小程序项目,选择新建(+),选择压缩包下的examSystem-exam1.0文件夹, 填写AppID(AppID:wx2fd6fcc3d4a9a059),定义项目名称,导入项目 3.文件目录说明 app.json 当前小程序的全局配置,包含了小程序所有页面路径 .wxml wxml文件定义小程序页面布局 .js js文件定义用户相关操作事件(交互逻辑) .wxss wxss文件定义当前小程序页面的局部页面样式 具体页面路径 pages/index/index:系统登录页面 pages/grid/index:登录成功后系统菜单页 pages/answer/answer:考试中心答题页面 pages/wrongQuestion/wrongQuestion:错题集页面 pages/logs/logs:日志文件 image:系统需用到图片 dist:UI框架需要icon、js 4.登录账号 姓名:admin 部门:001

    node-v7.10.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于AMDavaScript模块加载器迄今为止对AMD理解最好的实现

    功能概述 100% 支持 AMD 规格。支持模块化开发。定义模块后,无需维护依赖模块即可使用模块,只需编写一个依赖,lodJS 会自动负责依赖注入。 特性 模块化开发支持 异步加载 依赖注入 灵活的自定义功能 兼容性 Safari 浏览器 6+ (Mac) iOS 5+ Safari浏览器 Chrome 23+(Windows、Mac、Android、iOS、Linux、Chrome 操作系统) Firefox 4+(Windows、Mac、Android、Linux、Firefox 操作系统) Internet Explorer 6+(Windows、Windows Phone) Opera 10+(Windows、Linux、Android

Global site tag (gtag.js) - Google Analytics