- 浏览: 272007 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
flyingsnowff:
支付宝官方在线文档中心:https://doc.open.al ...
如何集成支付宝官方文档 -
timer_yin:
果然是这样
[转帖] 安装Eclipse插件长时间卡在 calculating requirements and dependencies -
dai_lm:
lyx0224 写道强~~~~~过奖,只是总结了前人的智慧,拼 ...
通过Wifi实现设备间的通信 -
lyx0224:
强~~~~~
通过Wifi实现设备间的通信 -
Goro:
帅!
自己封装的支持自动对焦的CameraView
在Android上模拟WP7的MetroUI
MetroItem
MetroView
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); } }
- MetroUI.rar (407.6 KB)
- 下载次数: 123
发表评论
-
获取Android Device的信息
2013-12-26 15:47 1447String phoneInfo = "PROD ... -
看雪学院-Android安全
2013-11-25 09:40 949http://bbs.pediy.com/forumdispl ... -
Toast原来也可以多样化
2013-09-18 13:48 1167Style 1: 默认 Toast def = Toast ... -
Google Map API V2
2013-05-13 13:37 2158以后如果要开发包含google map的程序就更麻烦咯 htt ... -
用OpenGL实现无限循环的coverflow
2013-04-26 14:16 4787网上找了很久,都是用Gallery实现的,效果不是很满意,结果 ... -
如何集成支付宝官方文档
2013-02-08 11:24 4481官方文档下载地址 https://b.alipay.com/o ... -
[转帖]裁剪图片
2013-01-30 17:22 935原帖:http://www.linuxidc.com/Linu ... -
MonkeyRunner的使用
2013-01-29 13:06 9660要使用MonkeyRunner,就要 ... -
重复执行某段代码
2012-12-29 14:36 1567用handler就可以了 private Handler ... -
选择音频的输出方式
2012-12-12 15:00 1952可以选择用耳机还是扬声器播放(蓝牙的就留到下次吧),要求SDK ... -
使FrameLayout的Gravity等于Center
2012-12-06 16:42 1712由于无法设置FrameLayout的Gravity,所以只能通 ... -
Uri.Builder与String互转
2012-08-14 15:56 2297Uri.Builder -> String Uri. ... -
判断屏幕尺寸
2012-07-17 10:21 1852// support from API 4 final ... -
自己封装的支持自动对焦的CameraView
2012-07-12 13:52 3600import java.io.BufferedOutp ... -
ADT 离线包下载地址
2012-07-06 14:32 1995更新ADT真是件苦恼的事啊 20.0.0的下载地址 http ... -
通过Wifi实现设备间的通信
2012-06-05 15:19 2003服务器端,建立监听(方法更新,可以同时连接多个Client) ... -
IP地址的获取及解析
2012-06-05 13:31 1251获取IP地址 WifiManager wifiManage ... -
判断网络是否有效
2012-05-28 17:32 948protected boolean isInternetA ... -
悬浮窗
2012-05-28 17:21 3043类似于360监视网络速度的那个悬浮窗 public cl ... -
自定义全屏Dialog
2012-04-20 13:16 4015关键在于设置Style <style nam ...
相关推荐
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.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 abac,rbac权限控制框架 支持角色继承,数据组,行为组 支持动态角色和静态角色 usage 用户与角色需要额外维护 权限控制规则默认驻留内存, 可自定义RuleRepository实现 角色继承关系默认驻留内存, 可自定义RoleHierarchyRepository实现 数据组关系默认驻留内存, 可自定义DataGroupRepository实现 行为组关系默认驻留内存, 可自定义ActionGroupRepository实现 若使用动态角色需要实现DynamicRoleDefiner
utlog.sqlite
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.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.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.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
煤炭地质勘查钻孔质量标准MTT1042-2007.pdf
149煤矿生产安全事故现场处置方案.pdf
javaweb登录注册页面,[信息办公]个人求职管理系统,jsp开发源码。
煤矿重要用途钢丝绳.PDF
2023-06-30-东方财富证券-华电重工-深度研究:乘氢能之风,新能源巨轮远航
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数据结构、对象、模块、迭代器等等超多内容 Django框架教程
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 微信小程序考试系统 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.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提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
功能概述 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