只能用canvas了,

10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有江口免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
百-度 青春華航,這是我的博客,希望多多交流。
HTML
HEAD
TITLE New Document /TITLE
script
function jishu1()
{
var s1=0,s2=0;
for(var i=1;i=1000;i++)
{
s1=s1+i;
if(i % 7 ==0)
s2=s2+i;
}
document.getElementById('div1').innerHTML="font color=red能被7整除的整數(shù)的和:"+s2+"br 1—1000內(nèi)所有整數(shù)的和:"+s1+"/font";
}
function jishu2()
{
var str="";
for(var i=1;i=9;i++)
{
for(var j=1;j=i;j++)
{
str=str+j+"*"+i+"="+(i*j)+" ";
}
str=str+"br ";
}
document.getElementById('div2').innerHTML=str;
}
function jishu3()
{
var sum=0;
for(var i=1;i=999;i++)
{
sum=sum+1/i;
}
document.getElementById('div3').innerHTML=sum;
}
function jishu4()
{
var s=0;
for(var i=1;i=500;i++)
{
if (i % 17 ==0)
{
s++;
}
}
document.getElementById('div4').innerHTML="1—500內(nèi)能被17整除的整數(shù)的個(gè)數(shù):"+s;
}
function jishu5()
{
var str="";
var s="";
var aa="500";
for(var i=500;i=1000;i++)
{
s=i+"";
if(s.charAt(s.length-1)=='0')
{
str=str+i+"br";
}
}
document.getElementById('div5').innerHTML=str;
}
/script
/HEAD
BODY
p第一題:
請(qǐng)計(jì)算1—1000內(nèi)所有整數(shù)的和
以及所有能被7整除的整數(shù)的和
提示: 使用一次循環(huán)(for),以及一次判斷(if)
需要輸出兩個(gè)變量: zonghe , heji7 /p
input type=button value="計(jì)算" onclick="jishu1();"/
hr
div id="div1"/div
p請(qǐng)輸出一個(gè)乘法口訣表
/p
input type=button value="計(jì)算" onclick="jishu2();"/
hr
div id="div2"/div
p請(qǐng)計(jì)算1+1/3+1/5+1/7+......+1/999的和
/p
input type=button value="計(jì)算" onclick="jishu3();"/
hr
div id="div3"/div
p請(qǐng)統(tǒng)計(jì)1—500內(nèi)能被17整除的整數(shù)的個(gè)數(shù)
/p
input type=button value="計(jì)算" onclick="jishu4();"/
hr
div id="div4"/div
p請(qǐng)輸出所有500—1000內(nèi)所有末位數(shù)是0的數(shù)字
/p
input type=button value="計(jì)算" onclick="jishu5();"/
hr
div id="div5"/div
/BODY
/HTML
前端是用Javascript操作canvas繪出各個(gè)元素(因此一些老的瀏覽器,如IE6、7等,無法使用),這些元素都是預(yù)定義的(包括rectangle, teardrop, standardImage等等),因此在瀏覽器中可以任意縮放而不失真。
保存到后端的時(shí)候?qū)⒄麄€(gè)畫布和元素的屬性定義用json(具體格式可以看.pos文件或者看POST的內(nèi)容)傳到服務(wù)器(應(yīng)該是java實(shí)現(xiàn)的),重新繪制成PNG(他們的PDF就是PNG轉(zhuǎn)的,所以無法矢量縮放)提供用戶下載
開發(fā)環(huán)境配置
1.需要一臺(tái)Mac(OSX),上面要安裝Xcode(建議Xcode7及以上的版本),Xcode可以在Mac App Store下載
2.安裝Homebrew,后面安裝Watchman和Flow推薦使用Homebrew安裝
ruby -e "$(curl -fsSL )"
如果之前安裝過Homebrew,可以先更新下:
brew update brew upgrade
3.安裝node.js
(1)安裝nvm(Node Version Manager)
curl -o- | bash
(2)安裝最新版本的Node.js
nvm install node nvm alias default node
當(dāng)然可以直接到Node.js官網(wǎng)下載dmg文件直接安裝,下載地址是
4.建議安裝watchman:
brew install watchman
5.安裝flow:
brew install flow
ok,按照以上步驟,你應(yīng)該已經(jīng)配置好了環(huán)境。
在現(xiàn)有項(xiàng)目中集成
1.CocoaPods
推薦使用CocoaPods的方式進(jìn)行集成,如果沒有使用過,可以參考《使用CocoaPods管理iOS項(xiàng)目中的依賴庫》這篇文章安裝配置。
2.安裝react-native package
react native現(xiàn)在使用npm的方式進(jìn)行安裝
(1)如果沒有安裝Node.js,需要按照前面的方式進(jìn)行安裝
(2)安裝完Node.js之后再項(xiàng)目根目錄(.xcodeproj文件所在目錄)下執(zhí)行npm install react-native的命令,執(zhí)行完成之后會(huì)創(chuàng)建一個(gè)node_modules的文件夾。
3.修改Podfile配置
在項(xiàng)目根目錄下的Podfile(如果沒有該文件可以使用pod init命令生成)文件中加入如下代碼:
pod 'React', :path = './node_modules/react-native', :subspecs = [
'Core',
'RCTImage',
'RCTNetwork',
'RCTText',
'RCTWebSocket',
#添加其他需要的subspecs
]
如果你在項(xiàng)目中使用了Text的組件,那么你必須添加RCTText的subspecs。配置完成之后執(zhí)行pod install即可。
4.編寫React Native代碼
(1)在項(xiàng)目的根目錄創(chuàng)建存放React Native代碼的目錄:
mkdir ReactComponent
(2)新建一個(gè)示例的index.ios.js的代碼
touch ReactComponent/index.ios.js
index.ios.js文件內(nèi)容,示例如下:
'use strict';
var React = require('react-native');
var {
Text,
View
} = React;
var styles = React.StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'red'
}
});
class SimpleApp extends React.Component {
render() {
return (
View style={styles.container}
TextThis is a simple application./Text
/View
)
}
}
React.AppRegistry.registerComponent('SimpleApp', () = SimpleApp);
SimpleApp即為你的Module Name,在后面會(huì)使用到。
5.在項(xiàng)目中加載React Native代碼
React Native不是通過UIWebView的方式進(jìn)行代碼的加載,而是使用了RCTRootView自定義的組件。RCTRootView提供了一個(gè)初始化的方法,支持在初始化視圖組件的時(shí)候加載React的代碼。
- (instancetype)initWithBundleURL:(NSURL *)bundleURL
moduleName:(NSString *)moduleName
initialProperties:(NSDictionary *)initialProperties
launchOptions:(NSDictionary *)launchOptions;
使用方式如下:
NSURL *jsCodeLocation = [NSURL URLWithString:@""];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName: @"SimpleApp"
initialProperties:nil
launchOptions:nil];
[self.view addSubview:rootView];
rootView.frame = self.view.bounds;
需要指出的是在初始化的時(shí)候支持通過URL的方式進(jìn)行加載,上面的方法是在線的服務(wù)器地址使用在發(fā)布環(huán)境下替換localhost為正式服務(wù)器的地址,另外一個(gè)是Bundle的路徑地址,示例如下:
NSURL *jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
為了生成jsbundle文件,可以通過下面的命令:
curl -o main.jsbundle
6.啟動(dòng)Development Server
終端進(jìn)入項(xiàng)目所在根目錄,執(zhí)行下面的代碼
(JS_DIR=`pwd`/ReactComponent; cd node_modules/react-native; npm run start -- --root $JS_DIR)
啟動(dòng)完成之后可以通過:進(jìn)行調(diào)用
Native和React的交互
關(guān)于React Native的通信機(jī)制,這里不再介紹,推薦兩篇文章:
1.《React Native通信機(jī)制詳解》
2.《React Native 初探(iOS)》
通信的流程圖如下:
React Native中JavaScript和Native之間交互是同Module的方式進(jìn)行的。Module是一個(gè)實(shí)現(xiàn)RCTBridgeModule協(xié)議的普通Objective-C的類,示例如下:
在.h文件中實(shí)現(xiàn)RCTBridgeModule的協(xié)議,示例如下:
//CalendarManager.h
#import "RCTBridgeModule.h"
@interface CalendarManager : NSObject RCTBridgeModule
@end
在.m文件中聲明是Module,添加RCT_EXPORT_MODULE的標(biāo)記,示例如下:
// CalendarManager.m
@implementation CalendarManager
RCT_EXPORT_MODULE();
@end
1.JavaScript調(diào)用Native Method
(1)Native的Module中使用RCT_EXPORT_METHOD()標(biāo)記方法:
RCT_EXPORT_METHOD(addEvent:(NSString *)name location:(NSString *)location) {
RCTLogInfo(@"Pretending to create an event %@ at %@", name, location);
}
(2)在JavaScript代碼中使用
var CalendarManager = require('react-native').NativeModules.CalendarManager;
CalendarManager.addEvent('Birthday Party', '4 Privet Drive, Surrey');
2.Native發(fā)送Events - JavaScript
在西北督查中心項(xiàng)目表單的填寫頁面上右上角放了一個(gè)提交按鈕,點(diǎn)擊提交按鈕后iOS的Objective-C會(huì)向React的Javascript代碼發(fā)送消息,代碼示例如下:
NSDictionary *parameters = @{@"data":@"hello"};
[self.rootView.bridge.eventDispatcher sendDeviceEventWithName:@"DemoEventName" body:parameters];
JavaScript端的處理代碼如下:
var subscription;
//在組件mount的時(shí)候注冊(cè)
subscription = DeviceEventEmitter.addListener('DemoEventName', (data) = {
//todo something
});
//在組件unmount的時(shí)候移除
subscription.remove();
文章標(biāo)題:javascript流程圖,javascript流程圖插件
網(wǎng)站鏈接:http://chinadenli.net/article1/dseoood.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、電子商務(wù)、網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)